Mercurial > pidgin
annotate finch/gntblist.c @ 24381:7493462e6959
A patch from Math2Gold to fix the dbus-analyze-functions script to properly
handle unsigned vs. signed in inputsimple.
Fixes #7432
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Thu, 13 Nov 2008 17:38:09 +0000 |
parents | a4a7084ee09d |
children | 0f7a248848ed 53c27ca1bb71 |
rev | line source |
---|---|
15817 | 1 /** |
2 * @file gntblist.c GNT BuddyList API | |
16194
0f0832c13fcb
Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents:
16106
diff
changeset
|
3 * @ingroup finch |
20074
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19681
diff
changeset
|
4 */ |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19681
diff
changeset
|
5 |
6bf32c9e15a7
remove gpl boilerplate from doxygen docs
Sean Egan <seanegan@gmail.com>
parents:
19681
diff
changeset
|
6 /* finch |
15817 | 7 * |
15870
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15843
diff
changeset
|
8 * Finch is the legal property of its developers, whose names are too numerous |
15817 | 9 * to list here. Please refer to the COPYRIGHT file distributed with this |
10 * source distribution. | |
11 * | |
12 * This program is free software; you can redistribute it and/or modify | |
13 * it under the terms of the GNU General Public License as published by | |
14 * the Free Software Foundation; either version 2 of the License, or | |
15 * (at your option) any later version. | |
16 * | |
17 * This program is distributed in the hope that it will be useful, | |
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 * GNU General Public License for more details. | |
21 * | |
22 * You should have received a copy of the GNU General Public License | |
23 * along with this program; if not, write to the Free Software | |
19681
44b4e8bd759b
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19375
diff
changeset
|
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
15817 | 25 */ |
18210
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18071
diff
changeset
|
26 #include "finch.h" |
b8572b937c09
#include reorganizations to allow compiling with glib < 2.8 using the
Stu Tomlinson <stu@nosnilmot.com>
parents:
18071
diff
changeset
|
27 |
15817 | 28 #include <account.h> |
29 #include <blist.h> | |
22248
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
30 #include <log.h> |
15817 | 31 #include <notify.h> |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
32 #include <privacy.h> |
15817 | 33 #include <request.h> |
34 #include <savedstatuses.h> | |
35 #include <server.h> | |
36 #include <signal.h> | |
37 #include <status.h> | |
38 #include <util.h> | |
39 #include "debug.h" | |
40 | |
41 #include "gntbox.h" | |
21691
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
42 #include "gntcolors.h" |
15817 | 43 #include "gntcombobox.h" |
44 #include "gntentry.h" | |
45 #include "gntft.h" | |
46 #include "gntlabel.h" | |
47 #include "gntline.h" | |
22248
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
48 #include "gntlog.h" |
15817 | 49 #include "gntmenu.h" |
50 #include "gntmenuitem.h" | |
51 #include "gntmenuitemcheck.h" | |
52 #include "gntpounce.h" | |
21691
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
53 #include "gntstyle.h" |
15817 | 54 #include "gnttree.h" |
55 #include "gntutils.h" | |
56 #include "gntwindow.h" | |
57 | |
58 #include "gntblist.h" | |
59 #include "gntconv.h" | |
60 #include "gntstatus.h" | |
61 #include <string.h> | |
62 | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16276
diff
changeset
|
63 #define PREF_ROOT "/finch/blist" |
15817 | 64 #define TYPING_TIMEOUT 4000 |
65 | |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
66 #define SHOW_EMPTY_GROUP_TIMEOUT 60 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
67 |
15817 | 68 typedef struct |
69 { | |
70 GntWidget *window; | |
71 GntWidget *tree; | |
72 | |
73 GntWidget *tooltip; | |
15822 | 74 PurpleBlistNode *tnode; /* Who is the tooltip being displayed for? */ |
15817 | 75 GList *tagged; /* A list of tagged blistnodes */ |
76 | |
77 GntWidget *context; | |
15822 | 78 PurpleBlistNode *cnode; |
15817 | 79 |
80 /* XXX: I am KISSing */ | |
81 GntWidget *status; /* Dropdown with the statuses */ | |
82 GntWidget *statustext; /* Status message */ | |
83 int typing; | |
84 | |
85 GntWidget *menu; | |
86 /* These are the menuitems that get regenerated */ | |
87 GntMenuItem *accounts; | |
88 GntMenuItem *plugins; | |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
89 GntMenuItem *grouping; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
90 |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
91 /* When a new group is manually added, it is empty, but we still want to show it |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
92 * for a while (SHOW_EMPTY_GROUP_TIMEOUT seconds) even if 'show empty groups' is |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
93 * not selected. |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
94 */ |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
95 GList *new_group; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
96 guint new_group_timeout; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
97 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
98 FinchBlistManager *manager; |
15817 | 99 } FinchBlist; |
100 | |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
101 typedef struct |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
102 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
103 gpointer row; /* the row in the GntTree */ |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
104 guint signed_timer; /* used when 'recently' signed on/off */ |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
105 } FinchBlistNode; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
106 |
15817 | 107 typedef enum |
108 { | |
109 STATUS_PRIMITIVE = 0, | |
110 STATUS_SAVED_POPULAR, | |
111 STATUS_SAVED_ALL, | |
112 STATUS_SAVED_NEW | |
113 } StatusType; | |
114 | |
115 typedef struct | |
116 { | |
117 StatusType type; | |
118 union | |
119 { | |
15822 | 120 PurpleStatusPrimitive prim; |
121 PurpleSavedStatus *saved; | |
15817 | 122 } u; |
123 } StatusBoxItem; | |
124 | |
18584
91fdd3e4892f
We don't need dynamic things here.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18565
diff
changeset
|
125 static FinchBlist *ggblist; |
15817 | 126 |
15822 | 127 static void add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist); |
128 static void add_contact(PurpleContact *contact, FinchBlist *ggblist); | |
129 static void add_group(PurpleGroup *group, FinchBlist *ggblist); | |
130 static void add_chat(PurpleChat *chat, FinchBlist *ggblist); | |
131 static void add_node(PurpleBlistNode *node, FinchBlist *ggblist); | |
18001
55a90b3fb1a1
Fix for the bug Alver reported:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17987
diff
changeset
|
132 static void node_update(PurpleBuddyList *list, PurpleBlistNode *node); |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
133 #if 0 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
134 static gboolean is_contact_online(PurpleContact *contact); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
135 static gboolean is_group_online(PurpleGroup *group); |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
136 #endif |
15817 | 137 static void draw_tooltip(FinchBlist *ggblist); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
138 static void tooltip_for_buddy(PurpleBuddy *buddy, GString *str, gboolean full); |
15817 | 139 static gboolean remove_typing_cb(gpointer null); |
140 static void remove_peripherals(FinchBlist *ggblist); | |
15822 | 141 static const char * get_display_name(PurpleBlistNode *node); |
142 static void savedstatus_changed(PurpleSavedStatus *now, PurpleSavedStatus *old); | |
143 static void blist_show(PurpleBuddyList *list); | |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
144 static void update_node_display(PurpleBlistNode *buddy, FinchBlist *ggblist); |
15822 | 145 static void update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist); |
16771
d7ad8013b914
Fix this spectacularly braindead code. I must've been on the good stuff when I wrote this. Fixes #364.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16655
diff
changeset
|
146 static void account_signed_on_cb(PurpleConnection *pc, gpointer null); |
17203
0d9fba04fc85
Re-show the add buddy request dialog if something went wrong. It's easy to lose the buddy who just added you otherwise.
Richard Nelson <wabz@pidgin.im>
parents:
17091
diff
changeset
|
147 static void finch_request_add_buddy(PurpleAccount *account, const char *username, const char *grp, const char *alias); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
148 static void menu_group_set_cb(GntMenuItem *item, gpointer null); |
15817 | 149 |
150 /* Sort functions */ | |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
151 static int blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2); |
15822 | 152 static int blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2); |
153 static int blist_node_compare_status(PurpleBlistNode *n1, PurpleBlistNode *n2); | |
154 static int blist_node_compare_log(PurpleBlistNode *n1, PurpleBlistNode *n2); | |
15817 | 155 |
21691
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
156 static int color_available; |
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
157 static int color_away; |
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
158 static int color_offline; |
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
159 static int color_idle; |
3ed9b027479d
Add support for colour in gnttreerows, and colourise the blist. Fixes #1490
Richard Nelson <wabz@pidgin.im>
parents:
21560
diff
changeset
|
160 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
161 /** |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
162 * Buddy List Manager functions. |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
163 */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
164 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
165 static gboolean default_can_add_node(PurpleBlistNode *node) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
166 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
167 gboolean offline = purple_prefs_get_bool(PREF_ROOT "/showoffline"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
168 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
169 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
170 PurpleBuddy *buddy = (PurpleBuddy*)node; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
171 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
172 if (!purple_buddy_get_contact(buddy)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
173 return FALSE; /* When a new buddy is added and show-offline is set */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
174 if (PURPLE_BUDDY_IS_ONLINE(buddy)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
175 return TRUE; /* The buddy is online */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
176 if (!purple_account_is_connected(purple_buddy_get_account(buddy))) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
177 return FALSE; /* The account is disconnected. Do not show */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
178 if (offline) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
179 return TRUE; /* We want to see offline buddies too */ |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
180 if (fnode && fnode->signed_timer) |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
181 return TRUE; /* Show if the buddy just signed off */ |
22192
1e103e1b845f
Pay attention to the 'show_offline' setting for the buddylist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22190
diff
changeset
|
182 if (purple_blist_node_get_bool(node, "show_offline")) |
1e103e1b845f
Pay attention to the 'show_offline' setting for the buddylist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22190
diff
changeset
|
183 return TRUE; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
184 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
185 PurpleBlistNode *nd; |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
186 for (nd = purple_blist_node_get_first_child(node); |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
187 nd; nd = purple_blist_node_get_sibling_next(nd)) { |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
188 if (default_can_add_node(nd)) |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
189 return TRUE; |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
190 } |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
191 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
192 PurpleChat *chat = (PurpleChat*)node; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
193 if (purple_account_is_connected(purple_chat_get_account(chat))) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
194 return TRUE; /* Show whenever the account is online */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
195 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
196 PurpleBlistNode *nd; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
197 gboolean empty = purple_prefs_get_bool(PREF_ROOT "/emptygroups"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
198 if (empty) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
199 return TRUE; /* If we want to see empty groups, we can show any group */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
200 |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
201 for (nd = purple_blist_node_get_first_child(node); |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
202 nd; nd = purple_blist_node_get_sibling_next(nd)) { |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
203 if (default_can_add_node(nd)) |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
204 return TRUE; |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
205 } |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
206 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
207 if (ggblist && ggblist->new_group && g_list_find(ggblist->new_group, node)) |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
208 return TRUE; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
209 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
210 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
211 return FALSE; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
212 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
213 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
214 static gpointer default_find_parent(PurpleBlistNode *node) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
215 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
216 gpointer ret = NULL; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
217 switch (purple_blist_node_get_type(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
218 case PURPLE_BLIST_BUDDY_NODE: |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
219 case PURPLE_BLIST_CONTACT_NODE: |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
220 case PURPLE_BLIST_CHAT_NODE: |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
221 ret = purple_blist_node_get_parent(node); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
222 break; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
223 default: |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
224 break; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
225 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
226 if (ret) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
227 add_node(ret, ggblist); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
228 return ret; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
229 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
230 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
231 static gboolean default_create_tooltip(gpointer selected_row, GString **body, char **tool_title) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
232 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
233 GString *str; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
234 PurpleBlistNode *node = selected_row; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
235 int lastseen = 0; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
236 char *title; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
237 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
238 if (!node || |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
239 purple_blist_node_get_type(node) == PURPLE_BLIST_OTHER_NODE) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
240 return FALSE; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
241 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
242 str = g_string_new(""); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
243 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
244 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
245 PurpleBuddy *pr = purple_contact_get_priority_buddy((PurpleContact*)node); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
246 gboolean offline = !PURPLE_BUDDY_IS_ONLINE(pr); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
247 gboolean showoffline = purple_prefs_get_bool(PREF_ROOT "/showoffline"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
248 const char *name = purple_buddy_get_name(pr); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
249 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
250 title = g_strdup(name); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
251 tooltip_for_buddy(pr, str, TRUE); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
252 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
253 PurpleBuddy *buddy = (PurpleBuddy*)node; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
254 if (offline) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
255 int value = purple_blist_node_get_int(node, "last_seen"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
256 if (value > lastseen) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
257 lastseen = value; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
258 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
259 if (node == (PurpleBlistNode*)pr) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
260 continue; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
261 if (!purple_account_is_connected(purple_buddy_get_account(buddy))) |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
262 continue; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
263 if (!showoffline && !PURPLE_BUDDY_IS_ONLINE(buddy)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
264 continue; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
265 str = g_string_append(str, "\n----------\n"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
266 tooltip_for_buddy(buddy, str, FALSE); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
267 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
268 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
269 PurpleBuddy *buddy = (PurpleBuddy *)node; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
270 tooltip_for_buddy(buddy, str, TRUE); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
271 title = g_strdup(purple_buddy_get_name(buddy)); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
272 if (!PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
273 lastseen = purple_blist_node_get_int(node, "last_seen"); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
274 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
275 PurpleGroup *group = (PurpleGroup *)node; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
276 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
277 g_string_append_printf(str, _("Online: %d\nTotal: %d"), |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
278 purple_blist_get_group_online_count(group), |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
279 purple_blist_get_group_size(group, FALSE)); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
280 |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
281 title = g_strdup(purple_group_get_name(group)); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
282 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
283 PurpleChat *chat = (PurpleChat *)node; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
284 PurpleAccount *account = purple_chat_get_account(chat); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
285 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
286 g_string_append_printf(str, _("Account: %s (%s)"), |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
287 purple_account_get_username(account), |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
288 purple_account_get_protocol_name(account)); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
289 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
290 title = g_strdup(purple_chat_get_name(chat)); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
291 } else { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
292 g_string_free(str, TRUE); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
293 return FALSE; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
294 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
295 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
296 if (lastseen > 0) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
297 char *tmp = purple_str_seconds_to_string(time(NULL) - lastseen); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
298 g_string_append_printf(str, _("\nLast Seen: %s ago"), tmp); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
299 g_free(tmp); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
300 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
301 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
302 if (tool_title) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
303 *tool_title = title; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
304 else |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
305 g_free(title); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
306 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
307 if (body) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
308 *body = str; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
309 else |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
310 g_string_free(str, TRUE); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
311 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
312 return TRUE; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
313 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
314 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
315 static FinchBlistManager default_manager = |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
316 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
317 "default", |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
318 N_("Default"), |
22190
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
319 NULL, |
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
320 NULL, |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
321 default_can_add_node, |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
322 default_find_parent, |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
323 default_create_tooltip, |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
324 {NULL, NULL, NULL, NULL} |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
325 }; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
326 static GList *managers; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
327 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
328 static FinchBlistNode * |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
329 create_finch_blist_node(PurpleBlistNode *node, gpointer row) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
330 { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
331 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
332 if (!fnode) { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
333 fnode = g_new0(FinchBlistNode, 1); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
334 fnode->signed_timer = 0; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
335 FINCH_SET_DATA(node, fnode); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
336 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
337 fnode->row = row; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
338 return fnode; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
339 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
340 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
341 static void |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
342 reset_blist_node_ui_data(PurpleBlistNode *node) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
343 { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
344 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
345 if (fnode == NULL) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
346 return; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
347 if (fnode->signed_timer) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
348 purple_timeout_remove(fnode->signed_timer); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
349 g_free(fnode); |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
350 FINCH_SET_DATA(node, NULL); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
351 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
352 |
21695
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
353 static int |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
354 get_display_color(PurpleBlistNode *node) |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
355 { |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
356 PurpleBuddy *buddy; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
357 int color = 0; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
358 |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
359 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
360 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
361 if (!PURPLE_BLIST_NODE_IS_BUDDY(node)) |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
362 return 0; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
363 |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
364 buddy = (PurpleBuddy*)node; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
365 if (purple_presence_is_idle(purple_buddy_get_presence(buddy))) { |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
366 color = color_idle; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
367 } else if (purple_presence_is_available(purple_buddy_get_presence(buddy))) { |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
368 color = color_available; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
369 } else if (purple_presence_is_online(purple_buddy_get_presence(buddy)) && |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
370 !purple_presence_is_available(purple_buddy_get_presence(buddy))) { |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
371 color = color_away; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
372 } else if (!purple_presence_is_online(purple_buddy_get_presence(buddy))) { |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
373 color = color_offline; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
374 } |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
375 |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
376 return color; |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
377 } |
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
378 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
379 static GntTextFormatFlags |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
380 get_blist_node_flag(PurpleBlistNode *node) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
381 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
382 GntTextFormatFlags flag = 0; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
383 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
384 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
385 if (ggblist->tagged && g_list_find(ggblist->tagged, node)) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
386 flag |= GNT_TEXT_FLAG_BOLD; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
387 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
388 if (fnode && fnode->signed_timer) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
389 flag |= GNT_TEXT_FLAG_BLINK; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
390 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
391 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact *)node); |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
392 fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
393 if (fnode && fnode->signed_timer) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
394 flag |= GNT_TEXT_FLAG_BLINK; |
22786
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
395 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
396 /* If the node is collapsed, then check to see if any of the priority buddies of |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
397 * any of the contacts within this group recently signed on/off, and set the blink |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
398 * flag appropriately. */ |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
399 /* XXX: Refs #5444 */ |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
400 /* XXX: there's no way I can ask if the node is expanded or not? *sigh* |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
401 * API addition would be necessary */ |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
402 #if 0 |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
403 if (!gnt_tree_get_expanded(GNT_TREE(ggblist->tree), node)) { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
404 for (node = purple_blist_node_get_first_child(node); node; |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
405 node = purple_blist_node_get_sibling_next(node)) { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
406 PurpleBlistNode *pnode; |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
407 pnode = purple_contact_get_priority_buddy((PurpleContact*)node); |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
408 fnode = FINCH_GET_DATA(node); |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
409 if (fnode && fnode->signed_timer) { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
410 flag |= GNT_TEXT_FLAG_BLINK; |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
411 break; |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
412 } |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
413 } |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
414 } |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
415 #endif |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
416 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
417 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
418 return flag; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
419 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
420 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
421 static void |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
422 blist_update_row_flags(PurpleBlistNode *node) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
423 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
424 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), node, get_blist_node_flag(node)); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
425 gnt_tree_set_row_color(GNT_TREE(ggblist->tree), node, get_display_color(node)); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
426 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
427 |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
428 #if 0 |
15817 | 429 static gboolean |
15822 | 430 is_contact_online(PurpleContact *contact) |
15817 | 431 { |
15822 | 432 PurpleBlistNode *node; |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
433 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)contact)); node; |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
434 node = purple_blist_node_get_sibling_next(node)) { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
435 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
436 if (PURPLE_BUDDY_IS_ONLINE((PurpleBuddy*)node) || |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
437 (fnode && fnode->signed_timer)) |
15817 | 438 return TRUE; |
439 } | |
440 return FALSE; | |
441 } | |
442 | |
443 static gboolean | |
15822 | 444 is_group_online(PurpleGroup *group) |
15817 | 445 { |
15822 | 446 PurpleBlistNode *node; |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
447 for (node = purple_blist_node_get_first_child(((PurpleBlistNode*)group)); node; |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
448 node = purple_blist_node_get_sibling_next(node)) { |
18490
095718d51209
Chats aren't shown if their account is offline, so a group of offline chats shouldn't be either
Richard Nelson <wabz@pidgin.im>
parents:
18442
diff
changeset
|
449 if (PURPLE_BLIST_NODE_IS_CHAT(node) && |
095718d51209
Chats aren't shown if their account is offline, so a group of offline chats shouldn't be either
Richard Nelson <wabz@pidgin.im>
parents:
18442
diff
changeset
|
450 purple_account_is_connected(((PurpleChat *)node)->account)) |
15817 | 451 return TRUE; |
15822 | 452 else if (is_contact_online((PurpleContact*)node)) |
15817 | 453 return TRUE; |
454 } | |
455 return FALSE; | |
456 } | |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
457 #endif |
15817 | 458 |
459 static void | |
15822 | 460 new_node(PurpleBlistNode *node) |
15817 | 461 { |
462 } | |
463 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
464 static void |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
465 add_node(PurpleBlistNode *node, FinchBlist *ggblist) |
15817 | 466 { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
467 if (FINCH_GET_DATA(node)) |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
468 return; |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
469 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
470 if (!ggblist->manager->can_add_node(node)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
471 return; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
472 |
15822 | 473 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) |
474 add_buddy((PurpleBuddy*)node, ggblist); | |
475 else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) | |
476 add_contact((PurpleContact*)node, ggblist); | |
477 else if (PURPLE_BLIST_NODE_IS_GROUP(node)) | |
478 add_group((PurpleGroup*)node, ggblist); | |
479 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) | |
480 add_chat((PurpleChat *)node, ggblist); | |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
481 |
15817 | 482 draw_tooltip(ggblist); |
483 } | |
484 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
485 void finch_blist_manager_add_node(PurpleBlistNode *node) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
486 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
487 add_node(node, ggblist); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
488 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
489 |
15817 | 490 static void |
491 remove_tooltip(FinchBlist *ggblist) | |
492 { | |
493 gnt_widget_destroy(ggblist->tooltip); | |
494 ggblist->tooltip = NULL; | |
495 ggblist->tnode = NULL; | |
496 } | |
497 | |
498 static void | |
15822 | 499 node_remove(PurpleBuddyList *list, PurpleBlistNode *node) |
15817 | 500 { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
501 FinchBlist *ggblist = FINCH_GET_DATA(list); |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
502 PurpleBlistNode *parent; |
15817 | 503 |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
504 if (ggblist == NULL || FINCH_GET_DATA(node) == NULL) |
15817 | 505 return; |
506 | |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
507 if (PURPLE_BLIST_NODE_IS_GROUP(node) && ggblist->new_group) { |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
508 ggblist->new_group = g_list_remove(ggblist->new_group, node); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
509 } |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
510 |
15817 | 511 gnt_tree_remove(GNT_TREE(ggblist->tree), node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
512 reset_blist_node_ui_data(node); |
15817 | 513 if (ggblist->tagged) |
514 ggblist->tagged = g_list_remove(ggblist->tagged, node); | |
515 | |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
516 parent = purple_blist_node_get_parent(node); |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
517 for (node = purple_blist_node_get_first_child(node); node; |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
518 node = purple_blist_node_get_sibling_next(node)) |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
519 node_remove(list, node); |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
520 |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
521 if (parent) { |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
522 if (!ggblist->manager->can_add_node(parent)) |
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
523 node_remove(list, parent); |
18001
55a90b3fb1a1
Fix for the bug Alver reported:
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17987
diff
changeset
|
524 else |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
525 node_update(list, parent); |
15817 | 526 } |
527 | |
528 draw_tooltip(ggblist); | |
529 } | |
530 | |
531 static void | |
15822 | 532 node_update(PurpleBuddyList *list, PurpleBlistNode *node) |
15817 | 533 { |
534 /* It really looks like this should never happen ... but it does. | |
535 This will at least emit a warning to the log when it | |
536 happens, so maybe someone will figure it out. */ | |
537 g_return_if_fail(node != NULL); | |
538 | |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
539 if (FINCH_GET_DATA(list)== NULL) |
15817 | 540 return; /* XXX: this is probably the place to auto-join chats */ |
541 | |
17987
1b6db70bdab2
Fix a crash exposed by nullprpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17804
diff
changeset
|
542 if (ggblist->window == NULL) |
1b6db70bdab2
Fix a crash exposed by nullprpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17804
diff
changeset
|
543 return; |
1b6db70bdab2
Fix a crash exposed by nullprpl.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17804
diff
changeset
|
544 |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
545 if (FINCH_GET_DATA(node)!= NULL) { |
15817 | 546 gnt_tree_change_text(GNT_TREE(ggblist->tree), node, |
547 0, get_display_name(node)); | |
548 gnt_tree_sort_row(GNT_TREE(ggblist->tree), node); | |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
549 blist_update_row_flags(node); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
550 if (gnt_tree_get_parent_key(GNT_TREE(ggblist->tree), node) != |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
551 ggblist->manager->find_parent(node)) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
552 node_remove(list, node); |
15817 | 553 } |
554 | |
15822 | 555 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
556 PurpleBuddy *buddy = (PurpleBuddy*)node; | |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
557 add_node((PurpleBlistNode*)buddy, FINCH_GET_DATA(list)); |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
558 node_update(list, purple_blist_node_get_parent(node)); |
15822 | 559 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
560 add_node(node, FINCH_GET_DATA(list)); |
15822 | 561 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
562 if (FINCH_GET_DATA(node)== NULL) { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
563 /* The core seems to expect the UI to add the buddies. */ |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
564 for (node = purple_blist_node_get_first_child(node); node; node = purple_blist_node_get_sibling_next(node)) |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
565 add_node(node, FINCH_GET_DATA(list)); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
566 } |
15822 | 567 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
568 if (!ggblist->manager->can_add_node(node)) |
15817 | 569 node_remove(list, node); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
570 else |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
571 add_node(node, FINCH_GET_DATA(list)); |
15817 | 572 } |
24001
e7d85f4fb3fc
Update the tooltip if the status of the selected node changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23342
diff
changeset
|
573 if (ggblist->tnode == node) { |
e7d85f4fb3fc
Update the tooltip if the status of the selected node changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23342
diff
changeset
|
574 draw_tooltip(ggblist); |
e7d85f4fb3fc
Update the tooltip if the status of the selected node changes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23342
diff
changeset
|
575 } |
15817 | 576 } |
577 | |
578 static void | |
15822 | 579 new_list(PurpleBuddyList *list) |
15817 | 580 { |
581 if (ggblist) | |
582 return; | |
583 | |
584 ggblist = g_new0(FinchBlist, 1); | |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
585 FINCH_SET_DATA(list, ggblist); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
586 ggblist->manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping")); |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
587 if (!ggblist->manager) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
588 ggblist->manager = &default_manager; |
15817 | 589 } |
590 | |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
591 static gboolean |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
592 remove_new_empty_group(gpointer data) |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
593 { |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
594 PurpleBuddyList *list; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
595 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
596 if (!ggblist) |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
597 return FALSE; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
598 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
599 list = purple_get_blist(); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
600 g_return_val_if_fail(list, FALSE); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
601 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
602 ggblist->new_group_timeout = 0; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
603 while (ggblist->new_group) { |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
604 PurpleBlistNode *group = ggblist->new_group->data; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
605 ggblist->new_group = g_list_delete_link(ggblist->new_group, ggblist->new_group); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
606 node_update(list, group); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
607 } |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
608 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
609 return FALSE; |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
610 } |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
611 |
15817 | 612 static void |
15822 | 613 add_buddy_cb(void *data, PurpleRequestFields *allfields) |
15817 | 614 { |
15822 | 615 const char *username = purple_request_fields_get_string(allfields, "screenname"); |
616 const char *alias = purple_request_fields_get_string(allfields, "alias"); | |
617 const char *group = purple_request_fields_get_string(allfields, "group"); | |
618 PurpleAccount *account = purple_request_fields_get_account(allfields, "account"); | |
15817 | 619 const char *error = NULL; |
15822 | 620 PurpleGroup *grp; |
621 PurpleBuddy *buddy; | |
15817 | 622 |
623 if (!username) | |
22794
cc8903c59d6b
Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <mark@kingant.net>
parents:
22786
diff
changeset
|
624 error = _("You must provide a username for the buddy."); |
15817 | 625 else if (!group) |
626 error = _("You must provide a group."); | |
627 else if (!account) | |
628 error = _("You must select an account."); | |
16926
7e4a22162bb6
Show an error message when trying to add a buddy from an offline account.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16925
diff
changeset
|
629 else if (!purple_account_is_connected(account)) |
7e4a22162bb6
Show an error message when trying to add a buddy from an offline account.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16925
diff
changeset
|
630 error = _("The selected account is not online."); |
15817 | 631 |
632 if (error) | |
633 { | |
17203
0d9fba04fc85
Re-show the add buddy request dialog if something went wrong. It's easy to lose the buddy who just added you otherwise.
Richard Nelson <wabz@pidgin.im>
parents:
17091
diff
changeset
|
634 finch_request_add_buddy(account, username, group, alias); |
15822 | 635 purple_notify_error(NULL, _("Error"), _("Error adding buddy"), error); |
15817 | 636 return; |
637 } | |
638 | |
15822 | 639 grp = purple_find_group(group); |
15817 | 640 if (!grp) |
641 { | |
15822 | 642 grp = purple_group_new(group); |
643 purple_blist_add_group(grp, NULL); | |
15817 | 644 } |
645 | |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
646 /* XXX: Ask if there's already the same buddy in the same group (#4553) */ |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
647 |
15822 | 648 buddy = purple_buddy_new(account, username, alias); |
649 purple_blist_add_buddy(buddy, NULL, grp, NULL); | |
650 purple_account_add_buddy(account, buddy); | |
15817 | 651 } |
652 | |
653 static void | |
15822 | 654 finch_request_add_buddy(PurpleAccount *account, const char *username, const char *grp, const char *alias) |
15817 | 655 { |
15822 | 656 PurpleRequestFields *fields = purple_request_fields_new(); |
657 PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL); | |
658 PurpleRequestField *field; | |
15817 | 659 |
15822 | 660 purple_request_fields_add_group(fields, group); |
15817 | 661 |
22794
cc8903c59d6b
Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <mark@kingant.net>
parents:
22786
diff
changeset
|
662 field = purple_request_field_string_new("screenname", _("Username"), username, FALSE); |
15822 | 663 purple_request_field_group_add_field(group, field); |
15817 | 664 |
22307
d270b6aebabc
Right-clicking on a widget should trigger the context-menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22251
diff
changeset
|
665 field = purple_request_field_string_new("alias", _("Alias (optional)"), alias, FALSE); |
15822 | 666 purple_request_field_group_add_field(group, field); |
15817 | 667 |
22307
d270b6aebabc
Right-clicking on a widget should trigger the context-menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22251
diff
changeset
|
668 field = purple_request_field_string_new("group", _("Add in group"), grp, FALSE); |
15822 | 669 purple_request_field_group_add_field(group, field); |
15843
e74c2488448b
Group autocomplete for buddy adding
Richard Nelson <wabz@pidgin.im>
parents:
15822
diff
changeset
|
670 purple_request_field_set_type_hint(field, "group"); |
15817 | 671 |
15822 | 672 field = purple_request_field_account_new("account", _("Account"), NULL); |
673 purple_request_field_account_set_show_all(field, FALSE); | |
15817 | 674 if (account) |
15822 | 675 purple_request_field_account_set_value(field, account); |
676 purple_request_field_group_add_field(group, field); | |
15817 | 677 |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
678 purple_request_fields(NULL, _("Add Buddy"), NULL, _("Please enter buddy information."), |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
679 fields, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
680 _("Add"), G_CALLBACK(add_buddy_cb), |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
681 _("Cancel"), NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
682 account, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
683 NULL); |
15817 | 684 } |
685 | |
686 static void | |
22838
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
687 join_chat(PurpleChat *chat) |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
688 { |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
689 PurpleAccount *account = purple_chat_get_account(chat); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
690 const char *name; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
691 PurpleConversation *conv; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
692 const char *alias; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
693 |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
694 /* This hack here is to work around the fact that there's no good way of |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
695 * getting the actual name of a chat. I don't understand why we return |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
696 * the alias for a chat when all we want is the name. */ |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
697 alias = chat->alias; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
698 chat->alias = NULL; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
699 name = purple_chat_get_name(chat); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
700 conv = purple_find_conversation_with_account( |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
701 PURPLE_CONV_TYPE_CHAT, name, account); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
702 chat->alias = (char *)alias; |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
703 |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
704 if (!conv || purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv))) { |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
705 serv_join_chat(purple_account_get_connection(account), |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
706 purple_chat_get_components(chat)); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
707 } else if (conv) { |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
708 purple_conversation_present(conv); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
709 } |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
710 } |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
711 |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
712 static void |
15822 | 713 add_chat_cb(void *data, PurpleRequestFields *allfields) |
15817 | 714 { |
15822 | 715 PurpleAccount *account; |
15817 | 716 const char *alias, *name, *group; |
15822 | 717 PurpleChat *chat; |
718 PurpleGroup *grp; | |
15817 | 719 GHashTable *hash = NULL; |
15822 | 720 PurpleConnection *gc; |
18586
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
721 gboolean autojoin; |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
722 PurplePluginProtocolInfo *info; |
15817 | 723 |
15822 | 724 account = purple_request_fields_get_account(allfields, "account"); |
725 name = purple_request_fields_get_string(allfields, "name"); | |
726 alias = purple_request_fields_get_string(allfields, "alias"); | |
727 group = purple_request_fields_get_string(allfields, "group"); | |
18586
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
728 autojoin = purple_request_fields_get_bool(allfields, "autojoin"); |
15817 | 729 |
15822 | 730 if (!purple_account_is_connected(account) || !name || !*name) |
15817 | 731 return; |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
732 |
15817 | 733 if (!group || !*group) |
734 group = _("Chats"); | |
735 | |
15822 | 736 gc = purple_account_get_connection(account); |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
737 info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); |
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
738 if (info->chat_info_defaults != NULL) |
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
739 hash = info->chat_info_defaults(gc, name); |
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
740 |
15822 | 741 chat = purple_chat_new(account, name, hash); |
15817 | 742 |
743 if (chat != NULL) { | |
15822 | 744 if ((grp = purple_find_group(group)) == NULL) { |
745 grp = purple_group_new(group); | |
746 purple_blist_add_group(grp, NULL); | |
15817 | 747 } |
15822 | 748 purple_blist_add_chat(chat, grp, NULL); |
749 purple_blist_alias_chat(chat, alias); | |
18586
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
750 purple_blist_node_set_bool((PurpleBlistNode*)chat, "gnt-autojoin", autojoin); |
22838
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
751 if (autojoin) { |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
752 join_chat(chat); |
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
753 } |
15817 | 754 } |
755 } | |
756 | |
757 static void | |
15822 | 758 finch_request_add_chat(PurpleAccount *account, PurpleGroup *grp, const char *alias, const char *name) |
15817 | 759 { |
15822 | 760 PurpleRequestFields *fields = purple_request_fields_new(); |
761 PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL); | |
762 PurpleRequestField *field; | |
15817 | 763 |
15822 | 764 purple_request_fields_add_group(fields, group); |
15817 | 765 |
15822 | 766 field = purple_request_field_account_new("account", _("Account"), NULL); |
767 purple_request_field_account_set_show_all(field, FALSE); | |
15817 | 768 if (account) |
15822 | 769 purple_request_field_account_set_value(field, account); |
770 purple_request_field_group_add_field(group, field); | |
15817 | 771 |
15822 | 772 field = purple_request_field_string_new("name", _("Name"), name, FALSE); |
773 purple_request_field_group_add_field(group, field); | |
15817 | 774 |
15822 | 775 field = purple_request_field_string_new("alias", _("Alias"), alias, FALSE); |
776 purple_request_field_group_add_field(group, field); | |
15817 | 777 |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
778 field = purple_request_field_string_new("group", _("Group"), grp ? purple_group_get_name(grp) : NULL, FALSE); |
15822 | 779 purple_request_field_group_add_field(group, field); |
22836
08befc594de4
Setup tab-completion for groups in the 'Add Chat' dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22794
diff
changeset
|
780 purple_request_field_set_type_hint(field, "group"); |
15817 | 781 |
18586
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
782 field = purple_request_field_bool_new("autojoin", _("Auto-join"), FALSE); |
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
783 purple_request_field_group_add_field(group, field); |
4fda1fc6d7cf
Add an 'auto-join' checkbox in the 'Add Chat' dialog, thanks to fmoo's
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18585
diff
changeset
|
784 |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
785 purple_request_fields(NULL, _("Add Chat"), NULL, |
15817 | 786 _("You can edit more information from the context menu later."), |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
787 fields, _("Add"), G_CALLBACK(add_chat_cb), _("Cancel"), NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
788 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
789 NULL); |
15817 | 790 } |
791 | |
792 static void | |
793 add_group_cb(gpointer null, const char *group) | |
794 { | |
15822 | 795 PurpleGroup *grp; |
15817 | 796 |
24238
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
797 if (!group || !*group) { |
15822 | 798 purple_notify_error(NULL, _("Error"), _("Error adding group"), |
15817 | 799 _("You must give a name for the group to add.")); |
800 return; | |
801 } | |
802 | |
15822 | 803 grp = purple_find_group(group); |
24238
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
804 if (!grp) { |
15822 | 805 grp = purple_group_new(group); |
806 purple_blist_add_group(grp, NULL); | |
15817 | 807 } |
24238
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
808 |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
809 if (!ggblist) |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
810 return; |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
811 |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
812 /* Treat the group as a new group even if it had existed before. This should |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
813 * make things easier to add buddies to empty groups (new or old) without having |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
814 * to turn on 'show empty groups' setting */ |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
815 ggblist->new_group = g_list_prepend(ggblist->new_group, grp); |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
816 if (ggblist->new_group_timeout) |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
817 purple_timeout_remove(ggblist->new_group_timeout); |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
818 ggblist->new_group_timeout = purple_timeout_add_seconds(SHOW_EMPTY_GROUP_TIMEOUT, |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
819 remove_new_empty_group, NULL); |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
820 |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
821 /* Select the group */ |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
822 if (ggblist->tree) { |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
823 FinchBlistNode *fnode = FINCH_GET_DATA((PurpleBlistNode*)grp); |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
824 if (!fnode) |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
825 add_node((PurpleBlistNode*)grp, ggblist); |
c8ed49367d86
Instead of showing error message when trying to interactively add an
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24215
diff
changeset
|
826 gnt_tree_set_selected(GNT_TREE(ggblist->tree), grp); |
15817 | 827 } |
828 } | |
829 | |
830 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
831 finch_request_add_group(void) |
15817 | 832 { |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
833 purple_request_input(NULL, _("Add Group"), NULL, _("Enter the name of the group"), |
15817 | 834 NULL, FALSE, FALSE, NULL, |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
835 _("Add"), G_CALLBACK(add_group_cb), _("Cancel"), NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
836 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
837 NULL); |
15817 | 838 } |
839 | |
15822 | 840 static PurpleBlistUiOps blist_ui_ops = |
15817 | 841 { |
842 new_list, | |
843 new_node, | |
844 blist_show, | |
845 node_update, | |
846 node_remove, | |
847 NULL, | |
848 NULL, | |
17091
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
849 finch_request_add_buddy, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
850 finch_request_add_chat, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
851 finch_request_add_group, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
852 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
853 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
854 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
16958
diff
changeset
|
855 NULL |
15817 | 856 }; |
857 | |
858 static gpointer | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
859 finch_blist_get_handle(void) |
15817 | 860 { |
861 static int handle; | |
862 | |
863 return &handle; | |
864 } | |
865 | |
866 static void | |
15822 | 867 add_group(PurpleGroup *group, FinchBlist *ggblist) |
15817 | 868 { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
869 gpointer parent; |
15822 | 870 PurpleBlistNode *node = (PurpleBlistNode *)group; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
871 if (FINCH_GET_DATA(node)) |
15817 | 872 return; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
873 parent = ggblist->manager->find_parent((PurpleBlistNode*)group); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
874 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), group, |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
875 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
876 parent, NULL)); |
16105
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
877 gnt_tree_set_expanded(GNT_TREE(ggblist->tree), node, |
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
878 !purple_blist_node_get_bool(node, "collapsed")); |
15817 | 879 } |
880 | |
881 static const char * | |
15822 | 882 get_display_name(PurpleBlistNode *node) |
15817 | 883 { |
884 static char text[2096]; | |
885 char status[8] = " "; | |
886 const char *name = NULL; | |
887 | |
15822 | 888 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) |
889 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); /* XXX: this can return NULL?! */ | |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
890 |
15817 | 891 if (node == NULL) |
892 return NULL; | |
893 | |
15822 | 894 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) |
15817 | 895 { |
15822 | 896 PurpleBuddy *buddy = (PurpleBuddy *)node; |
897 PurpleStatusPrimitive prim; | |
898 PurplePresence *presence; | |
899 PurpleStatus *now; | |
15817 | 900 gboolean ascii = gnt_ascii_only(); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
901 |
15822 | 902 presence = purple_buddy_get_presence(buddy); |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
903 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
904 strncpy(status, ascii ? ":" : "☎", sizeof(status) - 1); |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
905 else { |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
906 now = purple_presence_get_active_status(presence); |
15817 | 907 |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
908 prim = purple_status_type_get_primitive(purple_status_get_type(now)); |
15817 | 909 |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
910 switch(prim) { |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
911 case PURPLE_STATUS_OFFLINE: |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
912 strncpy(status, ascii ? "x" : "⊗", sizeof(status) - 1); |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
913 break; |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
914 case PURPLE_STATUS_AVAILABLE: |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
915 strncpy(status, ascii ? "o" : "â—¯", sizeof(status) - 1); |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
916 break; |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
917 default: |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
918 strncpy(status, ascii ? "." : "⊖", sizeof(status) - 1); |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
919 break; |
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
920 } |
15817 | 921 } |
15822 | 922 name = purple_buddy_get_alias(buddy); |
15817 | 923 } |
15822 | 924 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) |
15817 | 925 { |
15822 | 926 PurpleChat *chat = (PurpleChat*)node; |
927 name = purple_chat_get_name(chat); | |
15817 | 928 |
929 strncpy(status, "~", sizeof(status) - 1); | |
930 } | |
15822 | 931 else if (PURPLE_BLIST_NODE_IS_GROUP(node)) |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
932 return purple_group_get_name((PurpleGroup*)node); |
15817 | 933 |
934 snprintf(text, sizeof(text) - 1, "%s %s", status, name); | |
935 | |
936 return text; | |
937 } | |
938 | |
939 static void | |
15822 | 940 add_chat(PurpleChat *chat, FinchBlist *ggblist) |
15817 | 941 { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
942 gpointer parent; |
15822 | 943 PurpleBlistNode *node = (PurpleBlistNode *)chat; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
944 if (FINCH_GET_DATA(node)) |
15817 | 945 return; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
946 if (!purple_account_is_connected(purple_chat_get_account(chat))) |
15817 | 947 return; |
948 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
949 parent = ggblist->manager->find_parent((PurpleBlistNode*)chat); |
15817 | 950 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
951 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), chat, |
15817 | 952 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
953 parent, NULL)); |
15817 | 954 } |
955 | |
956 static void | |
15822 | 957 add_contact(PurpleContact *contact, FinchBlist *ggblist) |
15817 | 958 { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
959 gpointer parent; |
15822 | 960 PurpleBlistNode *node = (PurpleBlistNode*)contact; |
15817 | 961 const char *name; |
962 | |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
963 if (FINCH_GET_DATA(node)) |
15817 | 964 return; |
21695
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
965 |
15817 | 966 name = get_display_name(node); |
967 if (name == NULL) | |
968 return; | |
21695
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
969 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
970 parent = ggblist->manager->find_parent((PurpleBlistNode*)contact); |
15817 | 971 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
972 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), contact, |
15817 | 973 gnt_tree_create_row(GNT_TREE(ggblist->tree), name), |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
974 parent, NULL)); |
15817 | 975 |
976 gnt_tree_set_expanded(GNT_TREE(ggblist->tree), contact, FALSE); | |
977 } | |
978 | |
979 static void | |
15822 | 980 add_buddy(PurpleBuddy *buddy, FinchBlist *ggblist) |
15817 | 981 { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
982 gpointer parent; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
983 PurpleBlistNode *node = (PurpleBlistNode *)buddy; |
15822 | 984 PurpleContact *contact; |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
985 |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
986 if (FINCH_GET_DATA(node)) |
15817 | 987 return; |
988 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
989 contact = purple_buddy_get_contact(buddy); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
990 parent = ggblist->manager->find_parent((PurpleBlistNode*)buddy); |
15817 | 991 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
992 create_finch_blist_node(node, gnt_tree_add_row_after(GNT_TREE(ggblist->tree), buddy, |
15817 | 993 gnt_tree_create_row(GNT_TREE(ggblist->tree), get_display_name(node)), |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
994 parent, NULL)); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
995 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
996 blist_update_row_flags((PurpleBlistNode*)buddy); |
21695
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
997 if (buddy == purple_contact_get_priority_buddy(contact)) |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
998 blist_update_row_flags((PurpleBlistNode*)contact); |
15817 | 999 } |
1000 | |
1001 #if 0 | |
1002 static void | |
15822 | 1003 buddy_signed_on(PurpleBuddy *buddy, FinchBlist *ggblist) |
15817 | 1004 { |
15822 | 1005 add_node((PurpleBlistNode*)buddy, ggblist); |
15817 | 1006 } |
1007 | |
1008 static void | |
15822 | 1009 buddy_signed_off(PurpleBuddy *buddy, FinchBlist *ggblist) |
15817 | 1010 { |
15822 | 1011 node_remove(purple_get_blist(), (PurpleBlistNode*)buddy); |
15817 | 1012 } |
1013 #endif | |
1014 | |
15822 | 1015 PurpleBlistUiOps *finch_blist_get_ui_ops() |
15817 | 1016 { |
1017 return &blist_ui_ops; | |
1018 } | |
1019 | |
1020 static void | |
1021 selection_activate(GntWidget *widget, FinchBlist *ggblist) | |
1022 { | |
1023 GntTree *tree = GNT_TREE(ggblist->tree); | |
15822 | 1024 PurpleBlistNode *node = gnt_tree_get_selection_data(tree); |
15817 | 1025 |
1026 if (!node) | |
1027 return; | |
22838
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
1028 |
15822 | 1029 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) |
1030 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); | |
15817 | 1031 |
15822 | 1032 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) |
15817 | 1033 { |
15822 | 1034 PurpleBuddy *buddy = (PurpleBuddy *)node; |
18071
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1035 PurpleConversation *conv; |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1036 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1037 purple_buddy_get_name(buddy), |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1038 purple_buddy_get_account(buddy)); |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1039 if (!conv) { |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1040 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1041 purple_buddy_get_account(buddy), |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1042 purple_buddy_get_name(buddy)); |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1043 } else { |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
1044 FinchConv *ggconv = FINCH_GET_DATA(conv); |
18071
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1045 gnt_window_present(ggconv->window); |
bb9cd8dfc61c
present existing conversation window if one exists
Richard Nelson <wabz@pidgin.im>
parents:
18069
diff
changeset
|
1046 } |
15817 | 1047 finch_conversation_set_active(conv); |
1048 } | |
15822 | 1049 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) |
15817 | 1050 { |
22838
2d10cd28aa57
Check to see if we are already in a room before attempting to join. If
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22836
diff
changeset
|
1051 join_chat((PurpleChat*)node); |
15817 | 1052 } |
1053 } | |
1054 | |
1055 static void | |
1056 context_menu_callback(GntMenuItem *item, gpointer data) | |
1057 { | |
15822 | 1058 PurpleMenuAction *action = data; |
1059 PurpleBlistNode *node = ggblist->cnode; | |
15817 | 1060 if (action) { |
15822 | 1061 void (*callback)(PurpleBlistNode *, gpointer); |
1062 callback = (void (*)(PurpleBlistNode *, gpointer))action->callback; | |
15817 | 1063 if (callback) |
18512
0cb139b20d65
I can pretty much swear this worked at some point. I am not sure when this
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18490
diff
changeset
|
1064 callback(node, action->data); |
15817 | 1065 else |
1066 return; | |
1067 } | |
1068 } | |
1069 | |
1070 static void | |
15822 | 1071 gnt_append_menu_action(GntMenu *menu, PurpleMenuAction *action, gpointer parent) |
15817 | 1072 { |
1073 GList *list; | |
1074 GntMenuItem *item; | |
1075 | |
1076 if (action == NULL) | |
1077 return; | |
1078 | |
1079 item = gnt_menuitem_new(action->label); | |
1080 if (action->callback) | |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
1081 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), context_menu_callback, action); |
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
1082 gnt_menu_add_item(menu, GNT_MENU_ITEM(item)); |
15817 | 1083 |
1084 if (action->children) { | |
1085 GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP); | |
1086 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); | |
1087 for (list = action->children; list; list = list->next) | |
1088 gnt_append_menu_action(GNT_MENU(sub), list->data, action); | |
1089 } | |
1090 } | |
1091 | |
1092 static void | |
15822 | 1093 append_proto_menu(GntMenu *menu, PurpleConnection *gc, PurpleBlistNode *node) |
15817 | 1094 { |
1095 GList *list; | |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
1096 PurplePluginProtocolInfo *prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); |
15817 | 1097 |
1098 if(!prpl_info || !prpl_info->blist_node_menu) | |
1099 return; | |
1100 | |
1101 for(list = prpl_info->blist_node_menu(node); list; | |
1102 list = g_list_delete_link(list, list)) | |
1103 { | |
15822 | 1104 PurpleMenuAction *act = (PurpleMenuAction *) list->data; |
15817 | 1105 act->data = node; |
1106 gnt_append_menu_action(menu, act, NULL); | |
1107 } | |
1108 } | |
1109 | |
1110 static void | |
15822 | 1111 add_custom_action(GntMenu *menu, const char *label, PurpleCallback callback, |
15817 | 1112 gpointer data) |
1113 { | |
15822 | 1114 PurpleMenuAction *action = purple_menu_action_new(label, callback, data, NULL); |
15817 | 1115 gnt_append_menu_action(menu, action, NULL); |
1116 g_signal_connect_swapped(G_OBJECT(menu), "destroy", | |
15822 | 1117 G_CALLBACK(purple_menu_action_free), action); |
15817 | 1118 } |
1119 | |
1120 static void | |
15822 | 1121 chat_components_edit_ok(PurpleChat *chat, PurpleRequestFields *allfields) |
15817 | 1122 { |
1123 GList *groups, *fields; | |
1124 | |
15822 | 1125 for (groups = purple_request_fields_get_groups(allfields); groups; groups = groups->next) { |
1126 fields = purple_request_field_group_get_fields(groups->data); | |
15817 | 1127 for (; fields; fields = fields->next) { |
15822 | 1128 PurpleRequestField *field = fields->data; |
15817 | 1129 const char *id; |
1130 char *val; | |
1131 | |
15822 | 1132 id = purple_request_field_get_id(field); |
1133 if (purple_request_field_get_type(field) == PURPLE_REQUEST_FIELD_INTEGER) | |
1134 val = g_strdup_printf("%d", purple_request_field_int_get_value(field)); | |
15817 | 1135 else |
15822 | 1136 val = g_strdup(purple_request_field_string_get_value(field)); |
15817 | 1137 |
22786
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1138 if (!val) { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1139 g_hash_table_remove(purple_chat_get_components(chat), id); |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1140 } else { |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1141 g_hash_table_replace(purple_chat_get_components(chat), g_strdup(id), val); /* val should not be free'd */ |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1142 } |
15817 | 1143 } |
1144 } | |
1145 } | |
1146 | |
1147 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1148 chat_components_edit(PurpleBlistNode *selected, PurpleChat *chat) |
15817 | 1149 { |
15822 | 1150 PurpleRequestFields *fields = purple_request_fields_new(); |
1151 PurpleRequestFieldGroup *group = purple_request_field_group_new(NULL); | |
1152 PurpleRequestField *field; | |
15817 | 1153 GList *parts, *iter; |
1154 struct proto_chat_entry *pce; | |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22212
diff
changeset
|
1155 PurpleConnection *gc; |
15817 | 1156 |
15822 | 1157 purple_request_fields_add_group(fields, group); |
15817 | 1158 |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1159 gc = purple_account_get_connection(purple_chat_get_account(chat)); |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
1160 parts = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc))->chat_info(gc); |
15817 | 1161 |
1162 for (iter = parts; iter; iter = iter->next) { | |
1163 pce = iter->data; | |
1164 if (pce->is_int) { | |
1165 int val; | |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1166 const char *str = g_hash_table_lookup(purple_chat_get_components(chat), pce->identifier); |
15817 | 1167 if (!str || sscanf(str, "%d", &val) != 1) |
1168 val = pce->min; | |
15822 | 1169 field = purple_request_field_int_new(pce->identifier, pce->label, val); |
15817 | 1170 } else { |
15822 | 1171 field = purple_request_field_string_new(pce->identifier, pce->label, |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1172 g_hash_table_lookup(purple_chat_get_components(chat), pce->identifier), FALSE); |
22786
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1173 if (pce->secret) |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1174 purple_request_field_string_set_masked(field, TRUE); |
15817 | 1175 } |
1176 | |
22786
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1177 if (pce->required) |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1178 purple_request_field_set_required(field, TRUE); |
dd8cdf1d8b19
Fine tune the edit-settings dialog (e.g., mark fields as masked or
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22474
diff
changeset
|
1179 |
15822 | 1180 purple_request_field_group_add_field(group, field); |
15817 | 1181 g_free(pce); |
1182 } | |
1183 | |
1184 g_list_free(parts); | |
1185 | |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1186 purple_request_fields(NULL, _("Edit Chat"), NULL, _("Please Update the necessary fields."), |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1187 fields, _("Edit"), G_CALLBACK(chat_components_edit_ok), _("Cancel"), NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1188 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1189 chat); |
15817 | 1190 } |
1191 | |
1192 static void | |
1193 autojoin_toggled(GntMenuItem *item, gpointer data) | |
1194 { | |
15822 | 1195 PurpleMenuAction *action = data; |
1196 purple_blist_node_set_bool(action->data, "gnt-autojoin", | |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
1197 gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item))); |
15817 | 1198 } |
1199 | |
1200 static void | |
15822 | 1201 create_chat_menu(GntMenu *menu, PurpleChat *chat) |
15817 | 1202 { |
15822 | 1203 PurpleMenuAction *action = purple_menu_action_new(_("Auto-join"), NULL, chat, NULL); |
15817 | 1204 GntMenuItem *check = gnt_menuitem_check_new(action->label); |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
1205 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(check), |
15822 | 1206 purple_blist_node_get_bool((PurpleBlistNode*)chat, "gnt-autojoin")); |
15817 | 1207 gnt_menu_add_item(menu, check); |
1208 gnt_menuitem_set_callback(check, autojoin_toggled, action); | |
1209 g_signal_connect_swapped(G_OBJECT(menu), "destroy", | |
15822 | 1210 G_CALLBACK(purple_menu_action_free), action); |
15817 | 1211 |
15822 | 1212 add_custom_action(menu, _("Edit Settings"), (PurpleCallback)chat_components_edit, chat); |
15817 | 1213 } |
1214 | |
1215 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1216 finch_add_buddy(PurpleBlistNode *selected, PurpleGroup *grp) |
15817 | 1217 { |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
1218 purple_blist_request_add_buddy(NULL, NULL, grp ? purple_group_get_name(grp) : NULL, NULL); |
15817 | 1219 } |
1220 | |
1221 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1222 finch_add_group(PurpleBlistNode *selected, PurpleGroup *grp) |
15817 | 1223 { |
15822 | 1224 purple_blist_request_add_group(); |
15817 | 1225 } |
1226 | |
1227 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1228 finch_add_chat(PurpleBlistNode *selected, PurpleGroup *grp) |
15817 | 1229 { |
15822 | 1230 purple_blist_request_add_chat(NULL, grp, NULL, NULL); |
15817 | 1231 } |
1232 | |
1233 static void | |
15822 | 1234 create_group_menu(GntMenu *menu, PurpleGroup *group) |
15817 | 1235 { |
1236 add_custom_action(menu, _("Add Buddy"), | |
15822 | 1237 PURPLE_CALLBACK(finch_add_buddy), group); |
15817 | 1238 add_custom_action(menu, _("Add Chat"), |
15822 | 1239 PURPLE_CALLBACK(finch_add_chat), group); |
15817 | 1240 add_custom_action(menu, _("Add Group"), |
15822 | 1241 PURPLE_CALLBACK(finch_add_group), group); |
15817 | 1242 } |
1243 | |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17756
diff
changeset
|
1244 gpointer finch_retrieve_user_info(PurpleConnection *conn, const char *name) |
17750
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1245 { |
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1246 PurpleNotifyUserInfo *info = purple_notify_user_info_new(); |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17756
diff
changeset
|
1247 gpointer uihandle; |
17750
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1248 purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17756
diff
changeset
|
1249 uihandle = purple_notify_userinfo(conn, name, info, NULL, NULL); |
17750
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1250 purple_notify_user_info_destroy(info); |
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1251 |
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1252 serv_get_info(conn, name); |
17804
464840043c66
Show information about the user requesting authorization.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17756
diff
changeset
|
1253 return uihandle; |
17750
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1254 } |
319bcb73eb4e
Use utility functions to get user info. Closes #964.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17203
diff
changeset
|
1255 |
15817 | 1256 static void |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1257 finch_blist_get_buddy_info_cb(PurpleBlistNode *selected, PurpleBuddy *buddy) |
15817 | 1258 { |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1259 finch_retrieve_user_info(purple_account_get_connection(purple_buddy_get_account(buddy)), purple_buddy_get_name(buddy)); |
15817 | 1260 } |
1261 | |
1262 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1263 finch_blist_menu_send_file_cb(PurpleBlistNode *selected, PurpleBuddy *buddy) |
15817 | 1264 { |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1265 serv_send_file(purple_account_get_connection(purple_buddy_get_account(buddy)), purple_buddy_get_name(buddy), NULL); |
15817 | 1266 } |
1267 | |
1268 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1269 finch_blist_pounce_node_cb(PurpleBlistNode *selected, PurpleBlistNode *node) |
15817 | 1270 { |
15822 | 1271 PurpleBuddy *b; |
1272 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) | |
1273 b = purple_contact_get_priority_buddy((PurpleContact *)node); | |
15817 | 1274 else |
15822 | 1275 b = (PurpleBuddy *)node; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1276 finch_pounce_editor_show(purple_buddy_get_account(b), purple_buddy_get_name(b), NULL); |
15817 | 1277 } |
1278 | |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1279 static void |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1280 toggle_block_buddy(GntMenuItem *item, gpointer buddy) |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1281 { |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1282 gboolean block = gnt_menuitem_check_get_checked(GNT_MENU_ITEM_CHECK(item)); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1283 PurpleAccount *account = purple_buddy_get_account(buddy); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1284 const char *name = purple_buddy_get_name(buddy); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1285 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1286 block ? purple_privacy_deny(account, name, FALSE, FALSE) : |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1287 purple_privacy_allow(account, name, FALSE, FALSE); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1288 } |
15817 | 1289 |
1290 static void | |
24285
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1291 toggle_show_offline(GntMenuItem *item, gpointer buddy) |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1292 { |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1293 purple_blist_node_set_bool(buddy, "show_offline", |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1294 !purple_blist_node_get_bool(buddy, "show_offline")); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1295 if (!ggblist->manager->can_add_node(buddy)) |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1296 node_remove(purple_get_blist(), buddy); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1297 else |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1298 node_update(purple_get_blist(), buddy); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1299 } |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1300 |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1301 static void |
15822 | 1302 create_buddy_menu(GntMenu *menu, PurpleBuddy *buddy) |
15817 | 1303 { |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1304 PurpleAccount *account; |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1305 gboolean permitted; |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1306 GntMenuItem *item; |
15822 | 1307 PurplePluginProtocolInfo *prpl_info; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1308 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(buddy)); |
22213
16ff37f64e29
Update finch to not touch the internals of PurpleAccount. This also includes a change I made to reduce the Cyclomatic Complexity of one of the functions.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22212
diff
changeset
|
1309 |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
1310 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); |
15817 | 1311 if (prpl_info && prpl_info->get_info) |
1312 { | |
1313 add_custom_action(menu, _("Get Info"), | |
15822 | 1314 PURPLE_CALLBACK(finch_blist_get_buddy_info_cb), buddy); |
15817 | 1315 } |
1316 | |
1317 add_custom_action(menu, _("Add Buddy Pounce"), | |
15822 | 1318 PURPLE_CALLBACK(finch_blist_pounce_node_cb), buddy); |
15817 | 1319 |
1320 if (prpl_info && prpl_info->send_file) | |
1321 { | |
1322 if (!prpl_info->can_receive_file || | |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1323 prpl_info->can_receive_file(gc, purple_buddy_get_name(buddy))) |
15817 | 1324 add_custom_action(menu, _("Send File"), |
15822 | 1325 PURPLE_CALLBACK(finch_blist_menu_send_file_cb), buddy); |
15817 | 1326 } |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1327 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1328 account = purple_buddy_get_account(buddy); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1329 permitted = purple_privacy_check(account, purple_buddy_get_name(buddy)); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1330 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1331 item = gnt_menuitem_check_new(_("Blocked")); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1332 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), !permitted); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1333 gnt_menuitem_set_callback(item, toggle_block_buddy, buddy); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1334 gnt_menu_add_item(menu, item); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
1335 |
24285
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1336 item = gnt_menuitem_check_new(_("Show when offline")); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1337 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), purple_blist_node_get_bool((PurpleBlistNode*)buddy, "show_offline")); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1338 gnt_menuitem_set_callback(item, toggle_show_offline, buddy); |
a4a7084ee09d
Show when offline (because the plugin doesn't work no more).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24238
diff
changeset
|
1339 gnt_menu_add_item(menu, item); |
15817 | 1340 |
1341 /* Protocol actions */ | |
1342 append_proto_menu(menu, | |
15822 | 1343 purple_account_get_connection(purple_buddy_get_account(buddy)), |
1344 (PurpleBlistNode*)buddy); | |
15817 | 1345 } |
1346 | |
1347 static void | |
15822 | 1348 append_extended_menu(GntMenu *menu, PurpleBlistNode *node) |
15817 | 1349 { |
1350 GList *iter; | |
1351 | |
15822 | 1352 for (iter = purple_blist_node_get_extended_menu(node); |
15817 | 1353 iter; iter = g_list_delete_link(iter, iter)) |
1354 { | |
1355 gnt_append_menu_action(menu, iter->data, NULL); | |
1356 } | |
1357 } | |
1358 | |
15822 | 1359 /* Xerox'd from gtkdialogs.c:purple_gtkdialogs_remove_contact_cb */ |
15817 | 1360 static void |
15822 | 1361 remove_contact(PurpleContact *contact) |
15817 | 1362 { |
15822 | 1363 PurpleBlistNode *bnode, *cnode; |
1364 PurpleGroup *group; | |
15817 | 1365 |
15822 | 1366 cnode = (PurpleBlistNode *)contact; |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1367 group = (PurpleGroup*)purple_blist_node_get_parent(cnode); |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1368 for (bnode = purple_blist_node_get_first_child(cnode); bnode; bnode = purple_blist_node_get_sibling_next(bnode)) { |
15822 | 1369 PurpleBuddy *buddy = (PurpleBuddy*)bnode; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1370 PurpleAccount *account = purple_buddy_get_account(buddy); |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1371 if (purple_account_is_connected(account)) |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1372 purple_account_remove_buddy(account, buddy, group); |
15817 | 1373 } |
15822 | 1374 purple_blist_remove_contact(contact); |
15817 | 1375 } |
1376 | |
1377 static void | |
15822 | 1378 rename_blist_node(PurpleBlistNode *node, const char *newname) |
15817 | 1379 { |
1380 const char *name = newname; | |
1381 if (name && !*name) | |
1382 name = NULL; | |
1383 | |
15822 | 1384 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
1385 PurpleContact *contact = (PurpleContact*)node; | |
1386 PurpleBuddy *buddy = purple_contact_get_priority_buddy(contact); | |
1387 purple_blist_alias_contact(contact, name); | |
1388 purple_blist_alias_buddy(buddy, name); | |
15817 | 1389 serv_alias_buddy(buddy); |
15822 | 1390 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
1391 purple_blist_alias_buddy((PurpleBuddy*)node, name); | |
1392 serv_alias_buddy((PurpleBuddy*)node); | |
1393 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) | |
1394 purple_blist_alias_chat((PurpleChat*)node, name); | |
1395 else if (PURPLE_BLIST_NODE_IS_GROUP(node) && (name != NULL)) | |
1396 purple_blist_rename_group((PurpleGroup*)node, name); | |
15817 | 1397 else |
1398 g_return_if_reached(); | |
1399 } | |
1400 | |
1401 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1402 finch_blist_rename_node_cb(PurpleBlistNode *selected, PurpleBlistNode *node) |
15817 | 1403 { |
1404 const char *name = NULL; | |
1405 char *prompt; | |
16276
31dad9806e9d
Use 'alias' instead of 'rename' for non-group nodes. Thankfully, this does not introduce new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
1406 const char *text; |
15817 | 1407 |
15822 | 1408 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) |
1409 name = purple_contact_get_alias((PurpleContact*)node); | |
1410 else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) | |
1411 name = purple_buddy_get_contact_alias((PurpleBuddy*)node); | |
1412 else if (PURPLE_BLIST_NODE_IS_CHAT(node)) | |
1413 name = purple_chat_get_name((PurpleChat*)node); | |
1414 else if (PURPLE_BLIST_NODE_IS_GROUP(node)) | |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
1415 name = purple_group_get_name((PurpleGroup*)node); |
15817 | 1416 else |
1417 g_return_if_reached(); | |
1418 | |
1419 prompt = g_strdup_printf(_("Please enter the new name for %s"), name); | |
1420 | |
16958
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16926
diff
changeset
|
1421 text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Set Alias"); |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1422 purple_request_input(node, text, prompt, _("Enter empty string to reset the name."), |
16276
31dad9806e9d
Use 'alias' instead of 'rename' for non-group nodes. Thankfully, this does not introduce new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
1423 name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node), |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1424 _("Cancel"), NULL, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1425 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1426 node); |
15817 | 1427 |
1428 g_free(prompt); | |
1429 } | |
1430 | |
22248
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1431 |
22356
561729870929
Fix showing a contact's log, and don't access struct internals
Richard Nelson <wabz@pidgin.im>
parents:
22307
diff
changeset
|
1432 static void showlog_cb(PurpleBlistNode *sel, PurpleBlistNode *node) |
22248
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1433 { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1434 PurpleLogType type; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1435 PurpleAccount *account; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1436 char *name = NULL; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1437 |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1438 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1439 PurpleBuddy *b = (PurpleBuddy*) node; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1440 type = PURPLE_LOG_IM; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1441 name = g_strdup(b->name); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1442 account = b->account; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1443 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1444 PurpleChat *c = (PurpleChat*) node; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1445 PurplePluginProtocolInfo *prpl_info = NULL; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1446 type = PURPLE_LOG_CHAT; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1447 account = c->account; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1448 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_find_prpl(purple_account_get_protocol_id(account))); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1449 if (prpl_info && prpl_info->get_chat_name) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1450 name = prpl_info->get_chat_name(c->components); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1451 } |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1452 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1453 finch_log_show_contact((PurpleContact *)node); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1454 return; |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1455 } else { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1456 /* This callback should not have been registered for a node |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1457 * that doesn't match the type of one of the blocks above. */ |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1458 g_return_if_reached(); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1459 } |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1460 |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1461 if (name && account) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1462 finch_log_show(type, name, account); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1463 g_free(name); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1464 } |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1465 } |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1466 |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1467 |
15822 | 1468 /* Xeroxed from gtkdialogs.c:purple_gtkdialogs_remove_group_cb*/ |
15817 | 1469 static void |
15822 | 1470 remove_group(PurpleGroup *group) |
15817 | 1471 { |
15822 | 1472 PurpleBlistNode *cnode, *bnode; |
15817 | 1473 |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1474 cnode = purple_blist_node_get_first_child(((PurpleBlistNode*)group)); |
15817 | 1475 |
1476 while (cnode) { | |
15822 | 1477 if (PURPLE_BLIST_NODE_IS_CONTACT(cnode)) { |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1478 bnode = purple_blist_node_get_first_child(cnode); |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1479 cnode = purple_blist_node_get_sibling_next(cnode); |
15817 | 1480 while (bnode) { |
15822 | 1481 PurpleBuddy *buddy; |
1482 if (PURPLE_BLIST_NODE_IS_BUDDY(bnode)) { | |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1483 PurpleAccount *account; |
15822 | 1484 buddy = (PurpleBuddy*)bnode; |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1485 bnode = purple_blist_node_get_sibling_next(bnode); |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1486 account = purple_buddy_get_account(buddy); |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1487 if (purple_account_is_connected(account)) { |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1488 purple_account_remove_buddy(account, buddy, group); |
15822 | 1489 purple_blist_remove_buddy(buddy); |
15817 | 1490 } |
1491 } else { | |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1492 bnode = purple_blist_node_get_sibling_next(bnode); |
15817 | 1493 } |
1494 } | |
15822 | 1495 } else if (PURPLE_BLIST_NODE_IS_CHAT(cnode)) { |
1496 PurpleChat *chat = (PurpleChat *)cnode; | |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1497 cnode = purple_blist_node_get_sibling_next(cnode); |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
1498 if (purple_account_is_connected(purple_chat_get_account(chat))) |
15822 | 1499 purple_blist_remove_chat(chat); |
15817 | 1500 } else { |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1501 cnode = purple_blist_node_get_sibling_next(cnode); |
15817 | 1502 } |
1503 } | |
1504 | |
15822 | 1505 purple_blist_remove_group(group); |
15817 | 1506 } |
1507 | |
1508 static void | |
15822 | 1509 finch_blist_remove_node(PurpleBlistNode *node) |
15817 | 1510 { |
15822 | 1511 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
1512 remove_contact((PurpleContact*)node); | |
1513 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | |
1514 PurpleBuddy *buddy = (PurpleBuddy*)node; | |
1515 PurpleGroup *group = purple_buddy_get_group(buddy); | |
1516 purple_account_remove_buddy(purple_buddy_get_account(buddy), buddy, group); | |
1517 purple_blist_remove_buddy(buddy); | |
1518 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
1519 purple_blist_remove_chat((PurpleChat*)node); | |
1520 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { | |
1521 remove_group((PurpleGroup*)node); | |
15817 | 1522 } |
1523 } | |
1524 | |
1525 static void | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1526 finch_blist_remove_node_cb(PurpleBlistNode *selected, PurpleBlistNode *node) |
15817 | 1527 { |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1528 PurpleAccount *account = NULL; |
15817 | 1529 char *primary; |
1530 const char *name, *sec = NULL; | |
1531 | |
15822 | 1532 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
1533 PurpleContact *c = (PurpleContact*)node; | |
1534 name = purple_contact_get_alias(c); | |
15817 | 1535 if (c->totalsize > 1) |
1536 sec = _("Removing this contact will also remove all the buddies in the contact"); | |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1537 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
15822 | 1538 name = purple_buddy_get_name((PurpleBuddy*)node); |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1539 account = purple_buddy_get_account((PurpleBuddy*)node); |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1540 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
15822 | 1541 name = purple_chat_get_name((PurpleChat*)node); |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1542 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
1543 name = purple_group_get_name((PurpleGroup*)node); |
15817 | 1544 sec = _("Removing this group will also remove all the buddies in the group"); |
1545 } | |
1546 else | |
1547 return; | |
1548 | |
1549 primary = g_strdup_printf(_("Are you sure you want to remove %s?"), name); | |
1550 | |
1551 /* XXX: anything to do with the returned ui-handle? */ | |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1552 purple_request_action(node, _("Confirm Remove"), |
15817 | 1553 primary, sec, |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1554 1, |
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
1555 account, name, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
1556 node, 2, |
15817 | 1557 _("Remove"), finch_blist_remove_node, |
1558 _("Cancel"), NULL); | |
1559 g_free(primary); | |
1560 } | |
1561 | |
1562 static void | |
15822 | 1563 finch_blist_toggle_tag_buddy(PurpleBlistNode *node) |
15817 | 1564 { |
1565 GList *iter; | |
1566 if (node == NULL) | |
1567 return; | |
1568 if (ggblist->tagged && (iter = g_list_find(ggblist->tagged, node)) != NULL) { | |
1569 ggblist->tagged = g_list_delete_link(ggblist->tagged, iter); | |
1570 } else { | |
1571 ggblist->tagged = g_list_prepend(ggblist->tagged, node); | |
1572 } | |
15822 | 1573 if (PURPLE_BLIST_NODE_IS_CONTACT(node)) |
1574 node = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); | |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1575 if (PURPLE_BLIST_NODE_IS_BUDDY(node)) |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1576 update_buddy_display((PurpleBuddy*)node, ggblist); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1577 else |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1578 update_node_display(node, ggblist); |
15817 | 1579 } |
1580 | |
1581 static void | |
15822 | 1582 finch_blist_place_tagged(PurpleBlistNode *target) |
15817 | 1583 { |
15822 | 1584 PurpleGroup *tg = NULL; |
1585 PurpleContact *tc = NULL; | |
15817 | 1586 |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
1587 if (target == NULL || |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
1588 purple_blist_node_get_type(target) == PURPLE_BLIST_OTHER_NODE) |
15817 | 1589 return; |
1590 | |
15822 | 1591 if (PURPLE_BLIST_NODE_IS_GROUP(target)) |
1592 tg = (PurpleGroup*)target; | |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1593 else if (PURPLE_BLIST_NODE_IS_BUDDY(target)) { |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1594 tc = (PurpleContact*)purple_blist_node_get_parent(target); |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1595 tg = (PurpleGroup*)purple_blist_node_get_parent((PurpleBlistNode*)tc); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1596 } else { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1597 if (PURPLE_BLIST_NODE_IS_CONTACT(target)) |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1598 tc = (PurpleContact*)target; |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
1599 tg = (PurpleGroup*)purple_blist_node_get_parent(target); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1600 } |
15817 | 1601 |
1602 if (ggblist->tagged) { | |
1603 GList *list = ggblist->tagged; | |
1604 ggblist->tagged = NULL; | |
1605 while (list) { | |
15822 | 1606 PurpleBlistNode *node = list->data; |
15817 | 1607 list = g_list_delete_link(list, list); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1608 |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1609 if (PURPLE_BLIST_NODE_IS_GROUP(node)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1610 update_node_display(node, ggblist); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1611 /* Add the group after the current group */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1612 purple_blist_add_group((PurpleGroup*)node, (PurpleBlistNode*)tg); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1613 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1614 update_buddy_display(purple_contact_get_priority_buddy((PurpleContact*)node), ggblist); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1615 if ((PurpleBlistNode*)tg == target) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1616 /* The target is a group, just add the contact to the group. */ |
15822 | 1617 purple_blist_add_contact((PurpleContact*)node, tg, NULL); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1618 } else if (tc) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1619 /* The target is either a buddy, or a contact. Merge with that contact. */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1620 purple_blist_merge_contact((PurpleContact*)node, (PurpleBlistNode*)tc); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1621 } else { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1622 /* The target is a chat. Add the contact to the group after this chat. */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1623 purple_blist_add_contact((PurpleContact*)node, NULL, target); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1624 } |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1625 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1626 update_buddy_display((PurpleBuddy*)node, ggblist); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1627 if ((PurpleBlistNode*)tg == target) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1628 /* The target is a group. Add this buddy in a new contact under this group. */ |
15822 | 1629 purple_blist_add_buddy((PurpleBuddy*)node, NULL, tg, NULL); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1630 } else if (PURPLE_BLIST_NODE_IS_CONTACT(target)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1631 /* Add to the contact. */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1632 purple_blist_add_buddy((PurpleBuddy*)node, tc, NULL, NULL); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1633 } else if (PURPLE_BLIST_NODE_IS_BUDDY(target)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1634 /* Add to the contact after the selected buddy. */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1635 purple_blist_add_buddy((PurpleBuddy*)node, NULL, NULL, target); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1636 } else if (PURPLE_BLIST_NODE_IS_CHAT(target)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1637 /* Add to the selected chat's group. */ |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1638 purple_blist_add_buddy((PurpleBuddy*)node, NULL, tg, NULL); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1639 } |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1640 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1641 update_node_display(node, ggblist); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1642 if ((PurpleBlistNode*)tg == target) |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1643 purple_blist_add_chat((PurpleChat*)node, tg, NULL); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1644 else |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1645 purple_blist_add_chat((PurpleChat*)node, NULL, target); |
15817 | 1646 } |
1647 } | |
1648 } | |
1649 } | |
1650 | |
1651 static void | |
1652 context_menu_destroyed(GntWidget *widget, FinchBlist *ggblist) | |
1653 { | |
1654 ggblist->context = NULL; | |
1655 } | |
1656 | |
1657 static void | |
1658 draw_context_menu(FinchBlist *ggblist) | |
1659 { | |
15822 | 1660 PurpleBlistNode *node = NULL; |
15817 | 1661 GntWidget *context = NULL; |
1662 GntTree *tree = NULL; | |
1663 int x, y, top, width; | |
1664 char *title = NULL; | |
1665 | |
16813
e79555933fc6
Do not build the context menu if one is already being shown.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
1666 if (ggblist->context) |
e79555933fc6
Do not build the context menu if one is already being shown.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
1667 return; |
e79555933fc6
Do not build the context menu if one is already being shown.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16781
diff
changeset
|
1668 |
15817 | 1669 tree = GNT_TREE(ggblist->tree); |
1670 | |
1671 node = gnt_tree_get_selection_data(tree); | |
22172
0934fa012c8c
Do not show a context menu for an unknown node.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22171
diff
changeset
|
1672 if (node && purple_blist_node_get_type(node) == PURPLE_BLIST_OTHER_NODE) |
0934fa012c8c
Do not show a context menu for an unknown node.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22171
diff
changeset
|
1673 return; |
15817 | 1674 |
1675 if (ggblist->tooltip) | |
1676 remove_tooltip(ggblist); | |
1677 | |
1678 ggblist->cnode = node; | |
1679 | |
1680 ggblist->context = context = gnt_menu_new(GNT_MENU_POPUP); | |
1681 g_signal_connect(G_OBJECT(context), "destroy", G_CALLBACK(context_menu_destroyed), ggblist); | |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1682 g_signal_connect(G_OBJECT(context), "hide", G_CALLBACK(gnt_widget_destroy), NULL); |
15817 | 1683 |
1684 if (!node) { | |
1685 create_group_menu(GNT_MENU(context), NULL); | |
1686 title = g_strdup(_("Buddy List")); | |
15822 | 1687 } else if (PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
18565
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1688 ggblist->cnode = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)node); |
980d6e1b2d21
Fix a crash Eric found. These parameters were in reverse order.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18535
diff
changeset
|
1689 create_buddy_menu(GNT_MENU(context), (PurpleBuddy*)ggblist->cnode); |
15822 | 1690 title = g_strdup(purple_contact_get_alias((PurpleContact*)node)); |
1691 } else if (PURPLE_BLIST_NODE_IS_BUDDY(node)) { | |
1692 PurpleBuddy *buddy = (PurpleBuddy *)node; | |
15817 | 1693 create_buddy_menu(GNT_MENU(context), buddy); |
15822 | 1694 title = g_strdup(purple_buddy_get_name(buddy)); |
1695 } else if (PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
1696 PurpleChat *chat = (PurpleChat*)node; | |
15817 | 1697 create_chat_menu(GNT_MENU(context), chat); |
15822 | 1698 title = g_strdup(purple_chat_get_name(chat)); |
1699 } else if (PURPLE_BLIST_NODE_IS_GROUP(node)) { | |
1700 PurpleGroup *group = (PurpleGroup *)node; | |
15817 | 1701 create_group_menu(GNT_MENU(context), group); |
22220
1f256f63c52c
Update finch to not touch the internals of PurpleGroup.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22219
diff
changeset
|
1702 title = g_strdup(purple_group_get_name(group)); |
15817 | 1703 } |
1704 | |
1705 append_extended_menu(GNT_MENU(context), node); | |
1706 | |
1707 /* These are common for everything */ | |
1708 if (node) { | |
16276
31dad9806e9d
Use 'alias' instead of 'rename' for non-group nodes. Thankfully, this does not introduce new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
1709 add_custom_action(GNT_MENU(context), |
31dad9806e9d
Use 'alias' instead of 'rename' for non-group nodes. Thankfully, this does not introduce new strings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16194
diff
changeset
|
1710 PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Alias"), |
15822 | 1711 PURPLE_CALLBACK(finch_blist_rename_node_cb), node); |
15817 | 1712 add_custom_action(GNT_MENU(context), _("Remove"), |
15822 | 1713 PURPLE_CALLBACK(finch_blist_remove_node_cb), node); |
15817 | 1714 |
15822 | 1715 if (ggblist->tagged && (PURPLE_BLIST_NODE_IS_CONTACT(node) |
1716 || PURPLE_BLIST_NODE_IS_GROUP(node))) { | |
15817 | 1717 add_custom_action(GNT_MENU(context), _("Place tagged"), |
15822 | 1718 PURPLE_CALLBACK(finch_blist_place_tagged), node); |
15817 | 1719 } |
1720 | |
15822 | 1721 if (PURPLE_BLIST_NODE_IS_BUDDY(node) || PURPLE_BLIST_NODE_IS_CONTACT(node)) { |
15817 | 1722 add_custom_action(GNT_MENU(context), _("Toggle Tag"), |
15822 | 1723 PURPLE_CALLBACK(finch_blist_toggle_tag_buddy), node); |
15817 | 1724 } |
22248
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1725 if (!PURPLE_BLIST_NODE_IS_GROUP(node)) { |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1726 add_custom_action(GNT_MENU(context), _("View Log"), |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1727 PURPLE_CALLBACK(showlog_cb), node); |
88796aff14d6
Add a finch log viewer. This is largely copied from Pidgin.
Richard Nelson <wabz@pidgin.im>
parents:
22220
diff
changeset
|
1728 } |
15817 | 1729 } |
1730 | |
1731 /* Set the position for the popup */ | |
1732 gnt_widget_get_position(GNT_WIDGET(tree), &x, &y); | |
1733 gnt_widget_get_size(GNT_WIDGET(tree), &width, NULL); | |
1734 top = gnt_tree_get_selection_visible_line(tree); | |
1735 | |
1736 x += width; | |
1737 y += top - 1; | |
1738 | |
1739 gnt_widget_set_position(context, x, y); | |
1740 gnt_screen_menu_show(GNT_MENU(context)); | |
1741 g_free(title); | |
1742 } | |
1743 | |
1744 static void | |
18332
1862a23b1751
Show better tooltips for contacts.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18316
diff
changeset
|
1745 tooltip_for_buddy(PurpleBuddy *buddy, GString *str, gboolean full) |
15817 | 1746 { |
15822 | 1747 PurplePlugin *prpl; |
1748 PurplePluginProtocolInfo *prpl_info; | |
1749 PurpleAccount *account; | |
1750 PurpleNotifyUserInfo *user_info; | |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
1751 PurplePresence *presence; |
15822 | 1752 const char *alias = purple_buddy_get_alias(buddy); |
15817 | 1753 char *tmp, *strip; |
1754 | |
15822 | 1755 user_info = purple_notify_user_info_new(); |
15817 | 1756 |
15822 | 1757 account = purple_buddy_get_account(buddy); |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
1758 presence = purple_buddy_get_presence(buddy); |
15817 | 1759 |
19305
f0b25c6fa806
Fix #2607. (Finch tooltip HTML display)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18635
diff
changeset
|
1760 if (!full || g_utf8_collate(purple_buddy_get_name(buddy), alias)) { |
f0b25c6fa806
Fix #2607. (Finch tooltip HTML display)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18635
diff
changeset
|
1761 char *esc = g_markup_escape_text(alias, -1); |
f0b25c6fa806
Fix #2607. (Finch tooltip HTML display)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18635
diff
changeset
|
1762 purple_notify_user_info_add_pair(user_info, _("Nickname"), esc); |
f0b25c6fa806
Fix #2607. (Finch tooltip HTML display)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18635
diff
changeset
|
1763 g_free(esc); |
f0b25c6fa806
Fix #2607. (Finch tooltip HTML display)
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18635
diff
changeset
|
1764 } |
15817 | 1765 |
1766 tmp = g_strdup_printf("%s (%s)", | |
15822 | 1767 purple_account_get_username(account), |
1768 purple_account_get_protocol_name(account)); | |
1769 purple_notify_user_info_add_pair(user_info, _("Account"), tmp); | |
15817 | 1770 g_free(tmp); |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
1771 |
15822 | 1772 prpl = purple_find_prpl(purple_account_get_protocol_id(account)); |
1773 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); | |
15817 | 1774 if (prpl_info && prpl_info->tooltip_text) { |
18332
1862a23b1751
Show better tooltips for contacts.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18316
diff
changeset
|
1775 prpl_info->tooltip_text(buddy, user_info, full); |
15817 | 1776 } |
1777 | |
16424
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16276
diff
changeset
|
1778 if (purple_prefs_get_bool("/finch/blist/idletime")) { |
15822 | 1779 PurplePresence *pre = purple_buddy_get_presence(buddy); |
1780 if (purple_presence_is_idle(pre)) { | |
1781 time_t idle = purple_presence_get_idle_time(pre); | |
15817 | 1782 if (idle > 0) { |
15822 | 1783 char *st = purple_str_seconds_to_string(time(NULL) - idle); |
1784 purple_notify_user_info_add_pair(user_info, _("Idle"), st); | |
15817 | 1785 g_free(st); |
1786 } | |
1787 } | |
1788 } | |
1789 | |
15822 | 1790 tmp = purple_notify_user_info_get_text_with_newline(user_info, "<BR>"); |
1791 purple_notify_user_info_destroy(user_info); | |
15817 | 1792 |
15822 | 1793 strip = purple_markup_strip_html(tmp); |
15817 | 1794 g_string_append(str, strip); |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
1795 |
18635
5551e5ec1ce0
Insert a newline in the tooltip.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18586
diff
changeset
|
1796 if (purple_presence_is_status_primitive_active(presence, PURPLE_STATUS_MOBILE)) { |
5551e5ec1ce0
Insert a newline in the tooltip.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18586
diff
changeset
|
1797 g_string_append(str, "\n"); |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
1798 g_string_append(str, _("On Mobile")); |
18635
5551e5ec1ce0
Insert a newline in the tooltip.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18586
diff
changeset
|
1799 } |
18437
ecb223f9f75b
Show a pimping cool unicode status emblem for buddies on mobile (thanks, elb).
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18428
diff
changeset
|
1800 |
15817 | 1801 g_free(strip); |
1802 g_free(tmp); | |
1803 } | |
1804 | |
1805 static GString* | |
1806 make_sure_text_fits(GString *string) | |
1807 { | |
1808 int maxw = getmaxx(stdscr) - 3; | |
1809 char *str = gnt_util_onscreen_fit_string(string->str, maxw); | |
1810 string = g_string_assign(string, str); | |
1811 g_free(str); | |
1812 return string; | |
1813 } | |
1814 | |
1815 static gboolean | |
1816 draw_tooltip_real(FinchBlist *ggblist) | |
1817 { | |
15822 | 1818 PurpleBlistNode *node; |
15817 | 1819 int x, y, top, width, w, h; |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
1820 GString *str = NULL; |
15817 | 1821 GntTree *tree; |
1822 GntWidget *widget, *box, *tv; | |
1823 char *title = NULL; | |
1824 | |
1825 widget = ggblist->tree; | |
1826 tree = GNT_TREE(widget); | |
1827 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
1828 if (!gnt_widget_has_focus(ggblist->tree) || |
15817 | 1829 (ggblist->context && !GNT_WIDGET_IS_FLAG_SET(ggblist->context, GNT_WIDGET_INVISIBLE))) |
1830 return FALSE; | |
1831 | |
1832 if (ggblist->tooltip) | |
1833 { | |
1834 /* XXX: Once we can properly redraw on expose events, this can be removed at the end | |
1835 * to avoid the blinking*/ | |
1836 remove_tooltip(ggblist); | |
1837 } | |
1838 | |
1839 node = gnt_tree_get_selection_data(tree); | |
1840 if (!node) | |
1841 return FALSE; | |
1842 | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
1843 if (!ggblist->manager->create_tooltip(node, &str, &title)) |
15817 | 1844 return FALSE; |
1845 | |
1846 gnt_widget_get_position(widget, &x, &y); | |
1847 gnt_widget_get_size(widget, &width, NULL); | |
1848 top = gnt_tree_get_selection_visible_line(tree); | |
1849 | |
1850 x += width; | |
1851 y += top - 1; | |
1852 | |
1853 box = gnt_box_new(FALSE, FALSE); | |
1854 gnt_box_set_toplevel(GNT_BOX(box), TRUE); | |
1855 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_NO_SHADOW); | |
1856 gnt_box_set_title(GNT_BOX(box), title); | |
1857 | |
1858 str = make_sure_text_fits(str); | |
1859 gnt_util_get_text_bound(str->str, &w, &h); | |
18316
70325b0c5792
Use the new flags to make the tooltip look better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
1860 h = MAX(1, h); |
15817 | 1861 tv = gnt_text_view_new(); |
1862 gnt_widget_set_size(tv, w + 1, h); | |
18316
70325b0c5792
Use the new flags to make the tooltip look better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18210
diff
changeset
|
1863 gnt_text_view_set_flag(GNT_TEXT_VIEW(tv), GNT_TEXT_VIEW_NO_SCROLL); |
15817 | 1864 gnt_box_add_widget(GNT_BOX(box), tv); |
1865 | |
22474
8445ea581a6e
Move the tooltip to the left of the buddylist if there's not enough room to show it on the right.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22429
diff
changeset
|
1866 if (x + w >= getmaxx(stdscr)) |
8445ea581a6e
Move the tooltip to the left of the buddylist if there's not enough room to show it on the right.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22429
diff
changeset
|
1867 x -= w + width + 2; |
15817 | 1868 gnt_widget_set_position(box, x, y); |
1869 GNT_WIDGET_UNSET_FLAGS(box, GNT_WIDGET_CAN_TAKE_FOCUS); | |
1870 GNT_WIDGET_SET_FLAGS(box, GNT_WIDGET_TRANSIENT); | |
1871 gnt_widget_draw(box); | |
1872 | |
1873 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(tv), str->str, GNT_TEXT_FLAG_NORMAL); | |
1874 gnt_text_view_scroll(GNT_TEXT_VIEW(tv), 0); | |
1875 | |
1876 g_free(title); | |
1877 g_string_free(str, TRUE); | |
1878 ggblist->tooltip = box; | |
1879 ggblist->tnode = node; | |
1880 | |
1881 gnt_widget_set_name(ggblist->tooltip, "tooltip"); | |
1882 return FALSE; | |
1883 } | |
1884 | |
1885 static void | |
1886 draw_tooltip(FinchBlist *ggblist) | |
1887 { | |
1888 /* When an account has signed off, it removes one buddy at a time. | |
1889 * Drawing the tooltip after removing each buddy is expensive. On | |
1890 * top of that, if the selected buddy belongs to the disconnected | |
1891 * account, then retreiving the tooltip for that causes crash. So | |
1892 * let's make sure we wait for all the buddies to be removed first.*/ | |
1893 int id = g_timeout_add(0, (GSourceFunc)draw_tooltip_real, ggblist); | |
1894 g_object_set_data_full(G_OBJECT(ggblist->window), "draw_tooltip_calback", | |
1895 GINT_TO_POINTER(id), (GDestroyNotify)g_source_remove); | |
1896 } | |
1897 | |
1898 static void | |
1899 selection_changed(GntWidget *widget, gpointer old, gpointer current, FinchBlist *ggblist) | |
1900 { | |
16781
d0f9b2b217cf
Fix context menu unusualness in the buddylist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16771
diff
changeset
|
1901 remove_peripherals(ggblist); |
15817 | 1902 draw_tooltip(ggblist); |
1903 } | |
1904 | |
1905 static gboolean | |
1906 context_menu(GntWidget *widget, FinchBlist *ggblist) | |
1907 { | |
1908 draw_context_menu(ggblist); | |
1909 return TRUE; | |
1910 } | |
1911 | |
1912 static gboolean | |
1913 key_pressed(GntWidget *widget, const char *text, FinchBlist *ggblist) | |
1914 { | |
1915 if (text[0] == 27 && text[1] == 0) { | |
1916 /* Escape was pressed */ | |
21305
0208beabfa33
Cancel the typeahead search when escape is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
1917 if (gnt_tree_is_searching(GNT_TREE(ggblist->tree))) |
0208beabfa33
Cancel the typeahead search when escape is pressed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21244
diff
changeset
|
1918 gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "end-search", NULL); |
15817 | 1919 remove_peripherals(ggblist); |
1920 } else if (strcmp(text, GNT_KEY_CTRL_O) == 0) { | |
15822 | 1921 purple_prefs_set_bool(PREF_ROOT "/showoffline", |
1922 !purple_prefs_get_bool(PREF_ROOT "/showoffline")); | |
20625
54ff514fdd04
Pressing INSERT in the buddy list brings up the 'Add Buddy' dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20561
diff
changeset
|
1923 } else if (strcmp(text, GNT_KEY_INS) == 0) { |
54ff514fdd04
Pressing INSERT in the buddy list brings up the 'Add Buddy' dialog.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20561
diff
changeset
|
1924 purple_blist_request_add_buddy(NULL, NULL, NULL, NULL); |
18535
fad459189cc5
New feature: successful compilation.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18512
diff
changeset
|
1925 } else if (!gnt_tree_is_searching(GNT_TREE(ggblist->tree))) { |
15817 | 1926 if (strcmp(text, "t") == 0) { |
1927 finch_blist_toggle_tag_buddy(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree))); | |
1928 gnt_bindable_perform_action_named(GNT_BINDABLE(ggblist->tree), "move-down"); | |
1929 } else if (strcmp(text, "a") == 0) { | |
1930 finch_blist_place_tagged(gnt_tree_get_selection_data(GNT_TREE(ggblist->tree))); | |
1931 } else | |
1932 return FALSE; | |
1933 } else | |
1934 return FALSE; | |
1935 | |
1936 return TRUE; | |
1937 } | |
1938 | |
1939 static void | |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1940 update_node_display(PurpleBlistNode *node, FinchBlist *ggblist) |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1941 { |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
1942 GntTextFormatFlags flag = get_blist_node_flag(node); |
16567
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1943 gnt_tree_set_row_flags(GNT_TREE(ggblist->tree), node, flag); |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1944 } |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1945 |
7b692d5dd704
This makes it possible to rearrange chats and groups using the tag+attach system. Thanks a bunch to wabz for testing this. Fixes #379.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16483
diff
changeset
|
1946 static void |
15822 | 1947 update_buddy_display(PurpleBuddy *buddy, FinchBlist *ggblist) |
15817 | 1948 { |
15822 | 1949 PurpleContact *contact; |
21695
52bbf38a1cd2
Refactor the code a little bit.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21694
diff
changeset
|
1950 |
15822 | 1951 contact = purple_buddy_get_contact(buddy); |
15817 | 1952 |
15822 | 1953 gnt_tree_change_text(GNT_TREE(ggblist->tree), buddy, 0, get_display_name((PurpleBlistNode*)buddy)); |
1954 gnt_tree_change_text(GNT_TREE(ggblist->tree), contact, 0, get_display_name((PurpleBlistNode*)contact)); | |
15817 | 1955 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
1956 blist_update_row_flags((PurpleBlistNode *)buddy); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
1957 if (buddy == purple_contact_get_priority_buddy(contact)) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
1958 blist_update_row_flags((PurpleBlistNode *)contact); |
15817 | 1959 |
15822 | 1960 if (ggblist->tnode == (PurpleBlistNode*)buddy) |
15817 | 1961 draw_tooltip(ggblist); |
1962 } | |
1963 | |
1964 static void | |
15822 | 1965 buddy_status_changed(PurpleBuddy *buddy, PurpleStatus *old, PurpleStatus *now, FinchBlist *ggblist) |
15817 | 1966 { |
1967 update_buddy_display(buddy, ggblist); | |
1968 } | |
1969 | |
1970 static void | |
15822 | 1971 buddy_idle_changed(PurpleBuddy *buddy, int old, int new, FinchBlist *ggblist) |
15817 | 1972 { |
1973 update_buddy_display(buddy, ggblist); | |
1974 } | |
1975 | |
1976 static void | |
1977 remove_peripherals(FinchBlist *ggblist) | |
1978 { | |
1979 if (ggblist->tooltip) | |
1980 remove_tooltip(ggblist); | |
1981 else if (ggblist->context) | |
1982 gnt_widget_destroy(ggblist->context); | |
1983 } | |
1984 | |
1985 static void | |
1986 size_changed_cb(GntWidget *w, int wi, int h) | |
1987 { | |
1988 int width, height; | |
1989 gnt_widget_get_size(w, &width, &height); | |
15822 | 1990 purple_prefs_set_int(PREF_ROOT "/size/width", width); |
1991 purple_prefs_set_int(PREF_ROOT "/size/height", height); | |
15817 | 1992 } |
1993 | |
1994 static void | |
1995 save_position_cb(GntWidget *w, int x, int y) | |
1996 { | |
15822 | 1997 purple_prefs_set_int(PREF_ROOT "/position/x", x); |
1998 purple_prefs_set_int(PREF_ROOT "/position/y", y); | |
15817 | 1999 } |
2000 | |
2001 static void | |
2002 reset_blist_window(GntWidget *window, gpointer null) | |
2003 { | |
15822 | 2004 PurpleBlistNode *node; |
2005 purple_signals_disconnect_by_handle(finch_blist_get_handle()); | |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
2006 FINCH_SET_DATA(purple_get_blist(), NULL); |
15817 | 2007 |
15822 | 2008 node = purple_blist_get_root(); |
15817 | 2009 while (node) { |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2010 reset_blist_node_ui_data(node); |
15822 | 2011 node = purple_blist_node_next(node, TRUE); |
15817 | 2012 } |
2013 | |
2014 if (ggblist->typing) | |
2015 g_source_remove(ggblist->typing); | |
2016 remove_peripherals(ggblist); | |
2017 if (ggblist->tagged) | |
2018 g_list_free(ggblist->tagged); | |
24215
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2019 |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2020 if (ggblist->new_group_timeout) |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2021 purple_timeout_remove(ggblist->new_group_timeout); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2022 if (ggblist->new_group) |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2023 g_list_free(ggblist->new_group); |
95da3ec97c27
Show a manually added new empty group even if the preference is not set.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
24001
diff
changeset
|
2024 |
15817 | 2025 g_free(ggblist); |
2026 ggblist = NULL; | |
2027 } | |
2028 | |
2029 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
2030 populate_buddylist(void) |
15817 | 2031 { |
15822 | 2032 PurpleBlistNode *node; |
2033 PurpleBuddyList *list; | |
15817 | 2034 |
22190
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2035 if (ggblist->manager->init) |
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2036 ggblist->manager->init(); |
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2037 |
15822 | 2038 if (strcmp(purple_prefs_get_string(PREF_ROOT "/sort_type"), "text") == 0) { |
15817 | 2039 gnt_tree_set_compare_func(GNT_TREE(ggblist->tree), |
2040 (GCompareFunc)blist_node_compare_text); | |
15822 | 2041 } else if (strcmp(purple_prefs_get_string(PREF_ROOT "/sort_type"), "status") == 0) { |
15817 | 2042 gnt_tree_set_compare_func(GNT_TREE(ggblist->tree), |
2043 (GCompareFunc)blist_node_compare_status); | |
15822 | 2044 } else if (strcmp(purple_prefs_get_string(PREF_ROOT "/sort_type"), "log") == 0) { |
15817 | 2045 gnt_tree_set_compare_func(GNT_TREE(ggblist->tree), |
2046 (GCompareFunc)blist_node_compare_log); | |
2047 } | |
2048 | |
15822 | 2049 list = purple_get_blist(); |
2050 node = purple_blist_get_root(); | |
15817 | 2051 while (node) |
2052 { | |
2053 node_update(list, node); | |
15822 | 2054 node = purple_blist_node_next(node, FALSE); |
15817 | 2055 } |
2056 } | |
2057 | |
2058 static void | |
2059 destroy_status_list(GList *list) | |
2060 { | |
2061 g_list_foreach(list, (GFunc)g_free, NULL); | |
2062 g_list_free(list); | |
2063 } | |
2064 | |
2065 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
2066 populate_status_dropdown(void) |
15817 | 2067 { |
2068 int i; | |
2069 GList *iter; | |
2070 GList *items = NULL; | |
2071 StatusBoxItem *item = NULL; | |
2072 | |
2073 /* First the primitives */ | |
15822 | 2074 PurpleStatusPrimitive prims[] = {PURPLE_STATUS_AVAILABLE, PURPLE_STATUS_AWAY, |
2075 PURPLE_STATUS_INVISIBLE, PURPLE_STATUS_OFFLINE, PURPLE_STATUS_UNSET}; | |
15817 | 2076 |
2077 gnt_combo_box_remove_all(GNT_COMBO_BOX(ggblist->status)); | |
2078 | |
15822 | 2079 for (i = 0; prims[i] != PURPLE_STATUS_UNSET; i++) |
15817 | 2080 { |
2081 item = g_new0(StatusBoxItem, 1); | |
2082 item->type = STATUS_PRIMITIVE; | |
2083 item->u.prim = prims[i]; | |
2084 items = g_list_prepend(items, item); | |
2085 gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, | |
15822 | 2086 purple_primitive_get_name_from_type(prims[i])); |
15817 | 2087 } |
2088 | |
2089 /* Now the popular statuses */ | |
18585
823946ddd527
Memory leak fix.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18584
diff
changeset
|
2090 for (iter = purple_savedstatuses_get_popular(6); iter; iter = g_list_delete_link(iter, iter)) |
15817 | 2091 { |
2092 item = g_new0(StatusBoxItem, 1); | |
2093 item->type = STATUS_SAVED_POPULAR; | |
2094 item->u.saved = iter->data; | |
2095 items = g_list_prepend(items, item); | |
2096 gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, | |
15822 | 2097 purple_savedstatus_get_title(iter->data)); |
15817 | 2098 } |
2099 | |
2100 /* New savedstatus */ | |
2101 item = g_new0(StatusBoxItem, 1); | |
2102 item->type = STATUS_SAVED_NEW; | |
2103 items = g_list_prepend(items, item); | |
2104 gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, | |
2105 _("New...")); | |
2106 | |
2107 /* More savedstatuses */ | |
2108 item = g_new0(StatusBoxItem, 1); | |
2109 item->type = STATUS_SAVED_ALL; | |
2110 items = g_list_prepend(items, item); | |
2111 gnt_combo_box_add_data(GNT_COMBO_BOX(ggblist->status), item, | |
2112 _("Saved...")); | |
2113 | |
2114 /* The keys for the combobox are created here, and never used | |
2115 * anywhere else. So make sure the keys are freed when the widget | |
2116 * is destroyed. */ | |
2117 g_object_set_data_full(G_OBJECT(ggblist->status), "list of statuses", | |
2118 items, (GDestroyNotify)destroy_status_list); | |
2119 } | |
2120 | |
2121 static void | |
15822 | 2122 redraw_blist(const char *name, PurplePrefType type, gconstpointer val, gpointer data) |
15817 | 2123 { |
15822 | 2124 PurpleBlistNode *node, *sel; |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2125 FinchBlistManager *manager; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2126 |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2127 if (ggblist == NULL) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2128 return; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2129 |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2130 manager = finch_blist_manager_find(purple_prefs_get_string(PREF_ROOT "/grouping")); |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2131 if (manager == NULL) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2132 manager = &default_manager; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2133 if (ggblist->manager != manager) { |
22190
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2134 if (ggblist->manager->uninit) |
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2135 ggblist->manager->uninit(); |
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2136 |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2137 ggblist->manager = manager; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2138 if (manager->can_add_node == NULL) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2139 manager->can_add_node = default_can_add_node; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2140 if (manager->find_parent == NULL) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2141 manager->find_parent = default_find_parent; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2142 if (manager->create_tooltip == NULL) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2143 manager->create_tooltip = default_create_tooltip; |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2144 } |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2145 |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2146 if (ggblist->window == NULL) |
15817 | 2147 return; |
2148 | |
2149 sel = gnt_tree_get_selection_data(GNT_TREE(ggblist->tree)); | |
2150 gnt_tree_remove_all(GNT_TREE(ggblist->tree)); | |
22190
bcaf4a037704
Init and uninit the buddylist managers at appropriate times.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22181
diff
changeset
|
2151 |
15822 | 2152 node = purple_blist_get_root(); |
2153 for (; node; node = purple_blist_node_next(node, TRUE)) | |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2154 reset_blist_node_ui_data(node); |
15817 | 2155 populate_buddylist(); |
2156 gnt_tree_set_selected(GNT_TREE(ggblist->tree), sel); | |
2157 draw_tooltip(ggblist); | |
2158 } | |
2159 | |
2160 void finch_blist_init() | |
2161 { | |
21738
e3e64d1e4869
Add color to the conversation window to indicate various message attributes
Richard Nelson <wabz@pidgin.im>
parents:
21695
diff
changeset
|
2162 color_available = gnt_style_get_color(NULL, "color-available"); |
21694
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2163 if (!color_available) |
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2164 color_available = gnt_color_add_pair(COLOR_GREEN, -1); |
21738
e3e64d1e4869
Add color to the conversation window to indicate various message attributes
Richard Nelson <wabz@pidgin.im>
parents:
21695
diff
changeset
|
2165 color_away = gnt_style_get_color(NULL, "color-away"); |
21694
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2166 if (!color_away) |
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2167 color_away = gnt_color_add_pair(COLOR_BLUE, -1); |
21738
e3e64d1e4869
Add color to the conversation window to indicate various message attributes
Richard Nelson <wabz@pidgin.im>
parents:
21695
diff
changeset
|
2168 color_idle = gnt_style_get_color(NULL, "color-idle"); |
21694
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2169 if (!color_idle) |
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2170 color_idle = gnt_color_add_pair(COLOR_CYAN, -1); |
21738
e3e64d1e4869
Add color to the conversation window to indicate various message attributes
Richard Nelson <wabz@pidgin.im>
parents:
21695
diff
changeset
|
2171 color_offline = gnt_style_get_color(NULL, "color-offline"); |
21694
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2172 if (!color_offline) |
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2173 color_offline = gnt_color_add_pair(COLOR_RED, -1); |
2de3a2de5f13
Update the changelogs. Correct the man page. Allow 'default' to mean the
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21691
diff
changeset
|
2174 |
15822 | 2175 purple_prefs_add_none(PREF_ROOT); |
2176 purple_prefs_add_none(PREF_ROOT "/size"); | |
2177 purple_prefs_add_int(PREF_ROOT "/size/width", 20); | |
2178 purple_prefs_add_int(PREF_ROOT "/size/height", 17); | |
2179 purple_prefs_add_none(PREF_ROOT "/position"); | |
2180 purple_prefs_add_int(PREF_ROOT "/position/x", 0); | |
2181 purple_prefs_add_int(PREF_ROOT "/position/y", 0); | |
2182 purple_prefs_add_bool(PREF_ROOT "/idletime", TRUE); | |
2183 purple_prefs_add_bool(PREF_ROOT "/showoffline", FALSE); | |
18441
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
2184 purple_prefs_add_bool(PREF_ROOT "/emptygroups", FALSE); |
15822 | 2185 purple_prefs_add_string(PREF_ROOT "/sort_type", "text"); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2186 purple_prefs_add_string(PREF_ROOT "/grouping", "default"); |
15817 | 2187 |
15822 | 2188 purple_prefs_connect_callback(finch_blist_get_handle(), |
18441
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
2189 PREF_ROOT "/emptygroups", redraw_blist, NULL); |
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
2190 purple_prefs_connect_callback(finch_blist_get_handle(), |
15817 | 2191 PREF_ROOT "/showoffline", redraw_blist, NULL); |
15822 | 2192 purple_prefs_connect_callback(finch_blist_get_handle(), |
15817 | 2193 PREF_ROOT "/sort_type", redraw_blist, NULL); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2194 purple_prefs_connect_callback(finch_blist_get_handle(), |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2195 PREF_ROOT "/grouping", redraw_blist, NULL); |
15817 | 2196 |
15822 | 2197 purple_signal_connect(purple_connections_get_handle(), "signed-on", purple_blist_get_handle(), |
15817 | 2198 G_CALLBACK(account_signed_on_cb), NULL); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2199 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2200 finch_blist_install_manager(&default_manager); |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2201 |
15817 | 2202 return; |
2203 } | |
2204 | |
2205 static gboolean | |
2206 remove_typing_cb(gpointer null) | |
2207 { | |
15822 | 2208 PurpleSavedStatus *current; |
15817 | 2209 const char *message, *newmessage; |
15822 | 2210 PurpleStatusPrimitive prim, newprim; |
15817 | 2211 StatusBoxItem *item; |
2212 | |
15822 | 2213 current = purple_savedstatus_get_current(); |
2214 message = purple_savedstatus_get_message(current); | |
2215 prim = purple_savedstatus_get_type(current); | |
15817 | 2216 |
2217 newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); | |
2218 item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); | |
16655
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2219 |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2220 switch (item->type) { |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2221 case STATUS_PRIMITIVE: |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2222 newprim = item->u.prim; |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2223 break; |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2224 case STATUS_SAVED_POPULAR: |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2225 newprim = purple_savedstatus_get_type(item->u.saved); |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2226 break; |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2227 default: |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2228 goto end; /* 'New' or 'Saved' is selected, but this should never happen. */ |
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2229 } |
15817 | 2230 |
2231 if (newprim != prim || ((message && !newmessage) || | |
2232 (!message && newmessage) || | |
2233 (message && newmessage && g_utf8_collate(message, newmessage) != 0))) | |
2234 { | |
15822 | 2235 PurpleSavedStatus *status = purple_savedstatus_find_transient_by_type_and_message(newprim, newmessage); |
15817 | 2236 /* Holy Crap! That's a LAWNG function name */ |
2237 if (status == NULL) | |
2238 { | |
15822 | 2239 status = purple_savedstatus_new(NULL, newprim); |
2240 purple_savedstatus_set_message(status, newmessage); | |
15817 | 2241 } |
2242 | |
15822 | 2243 purple_savedstatus_activate(status); |
15817 | 2244 } |
2245 | |
2246 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); | |
16655
1c9835f8b29c
A rare crash fix for finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16567
diff
changeset
|
2247 end: |
15817 | 2248 if (ggblist->typing) |
2249 g_source_remove(ggblist->typing); | |
2250 ggblist->typing = 0; | |
2251 return FALSE; | |
2252 } | |
2253 | |
2254 static void | |
2255 status_selection_changed(GntComboBox *box, StatusBoxItem *old, StatusBoxItem *now, gpointer null) | |
2256 { | |
2257 gnt_entry_set_text(GNT_ENTRY(ggblist->statustext), NULL); | |
2258 if (now->type == STATUS_SAVED_POPULAR) | |
2259 { | |
2260 /* Set the status immediately */ | |
15822 | 2261 purple_savedstatus_activate(now->u.saved); |
15817 | 2262 } |
2263 else if (now->type == STATUS_PRIMITIVE) | |
2264 { | |
2265 /* Move the focus to the entry box */ | |
2266 /* XXX: Make sure the selected status can have a message */ | |
2267 gnt_box_move_focus(GNT_BOX(ggblist->window), 1); | |
2268 ggblist->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, NULL); | |
2269 } | |
2270 else if (now->type == STATUS_SAVED_ALL) | |
2271 { | |
2272 /* Restore the selection to reflect current status. */ | |
15822 | 2273 savedstatus_changed(purple_savedstatus_get_current(), NULL); |
15817 | 2274 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); |
2275 finch_savedstatus_show_all(); | |
2276 } | |
2277 else if (now->type == STATUS_SAVED_NEW) | |
2278 { | |
15822 | 2279 savedstatus_changed(purple_savedstatus_get_current(), NULL); |
15817 | 2280 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); |
2281 finch_savedstatus_edit(NULL); | |
2282 } | |
2283 else | |
2284 g_return_if_reached(); | |
2285 } | |
2286 | |
2287 static gboolean | |
2288 status_text_changed(GntEntry *entry, const char *text, gpointer null) | |
2289 { | |
2290 if ((text[0] == 27 || (text[0] == '\t' && text[1] == '\0')) && ggblist->typing == 0) | |
2291 return FALSE; | |
2292 | |
2293 if (ggblist->typing) | |
2294 g_source_remove(ggblist->typing); | |
2295 ggblist->typing = 0; | |
2296 | |
2297 if (text[0] == '\r' && text[1] == 0) | |
2298 { | |
2299 /* Set the status only after you press 'Enter' */ | |
2300 remove_typing_cb(NULL); | |
2301 return TRUE; | |
2302 } | |
2303 | |
2304 ggblist->typing = g_timeout_add(TYPING_TIMEOUT, (GSourceFunc)remove_typing_cb, NULL); | |
2305 return FALSE; | |
2306 } | |
2307 | |
2308 static void | |
15822 | 2309 savedstatus_changed(PurpleSavedStatus *now, PurpleSavedStatus *old) |
15817 | 2310 { |
2311 GList *list; | |
15822 | 2312 PurpleStatusPrimitive prim; |
15817 | 2313 const char *message; |
2314 gboolean found = FALSE, saved = TRUE; | |
2315 | |
2316 if (!ggblist) | |
2317 return; | |
2318 | |
2319 /* Block the signals we don't want to emit */ | |
2320 g_signal_handlers_block_matched(ggblist->status, G_SIGNAL_MATCH_FUNC, | |
2321 0, 0, NULL, status_selection_changed, NULL); | |
2322 g_signal_handlers_block_matched(ggblist->statustext, G_SIGNAL_MATCH_FUNC, | |
2323 0, 0, NULL, status_text_changed, NULL); | |
2324 | |
15822 | 2325 prim = purple_savedstatus_get_type(now); |
2326 message = purple_savedstatus_get_message(now); | |
15817 | 2327 |
2328 /* Rebuild the status dropdown */ | |
2329 populate_status_dropdown(); | |
2330 | |
2331 while (!found) { | |
2332 list = g_object_get_data(G_OBJECT(ggblist->status), "list of statuses"); | |
2333 for (; list; list = list->next) | |
2334 { | |
2335 StatusBoxItem *item = list->data; | |
2336 if ((saved && item->type != STATUS_PRIMITIVE && item->u.saved == now) || | |
2337 (!saved && item->type == STATUS_PRIMITIVE && item->u.prim == prim)) | |
2338 { | |
15822 | 2339 char *mess = purple_unescape_html(message); |
15817 | 2340 gnt_combo_box_set_selected(GNT_COMBO_BOX(ggblist->status), item); |
2341 gnt_entry_set_text(GNT_ENTRY(ggblist->statustext), mess); | |
2342 gnt_widget_draw(ggblist->status); | |
2343 g_free(mess); | |
2344 found = TRUE; | |
2345 break; | |
2346 } | |
2347 } | |
2348 if (!saved) | |
2349 break; | |
2350 saved = FALSE; | |
2351 } | |
2352 | |
2353 g_signal_handlers_unblock_matched(ggblist->status, G_SIGNAL_MATCH_FUNC, | |
2354 0, 0, NULL, status_selection_changed, NULL); | |
2355 g_signal_handlers_unblock_matched(ggblist->statustext, G_SIGNAL_MATCH_FUNC, | |
2356 0, 0, NULL, status_text_changed, NULL); | |
2357 } | |
2358 | |
2359 static int | |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2360 blist_node_compare_position(PurpleBlistNode *n1, PurpleBlistNode *n2) |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2361 { |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2362 while ((n1 = purple_blist_node_get_sibling_prev(n1)) != NULL) |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2363 if (n1 == n2) |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2364 return 1; |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2365 return -1; |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2366 } |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2367 |
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2368 static int |
15822 | 2369 blist_node_compare_text(PurpleBlistNode *n1, PurpleBlistNode *n2) |
15817 | 2370 { |
2371 const char *s1, *s2; | |
2372 char *us1, *us2; | |
2373 int ret; | |
17240
29b3dc9cc8c5
It's valid for different types to be compared. In that case, use existing positions.
Richard Nelson <wabz@pidgin.im>
parents:
17203
diff
changeset
|
2374 |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2375 if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) |
17240
29b3dc9cc8c5
It's valid for different types to be compared. In that case, use existing positions.
Richard Nelson <wabz@pidgin.im>
parents:
17203
diff
changeset
|
2376 return blist_node_compare_position(n1, n2); |
29b3dc9cc8c5
It's valid for different types to be compared. In that case, use existing positions.
Richard Nelson <wabz@pidgin.im>
parents:
17203
diff
changeset
|
2377 |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2378 switch (purple_blist_node_get_type(n1)) |
15817 | 2379 { |
15822 | 2380 case PURPLE_BLIST_CHAT_NODE: |
2381 s1 = purple_chat_get_name((PurpleChat*)n1); | |
2382 s2 = purple_chat_get_name((PurpleChat*)n2); | |
15817 | 2383 break; |
15822 | 2384 case PURPLE_BLIST_BUDDY_NODE: |
2385 return purple_presence_compare(purple_buddy_get_presence((PurpleBuddy*)n1), | |
2386 purple_buddy_get_presence((PurpleBuddy*)n2)); | |
15817 | 2387 break; |
15822 | 2388 case PURPLE_BLIST_CONTACT_NODE: |
2389 s1 = purple_contact_get_alias((PurpleContact*)n1); | |
2390 s2 = purple_contact_get_alias((PurpleContact*)n2); | |
15817 | 2391 break; |
2392 default: | |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2393 return blist_node_compare_position(n1, n2); |
15817 | 2394 } |
2395 | |
2396 us1 = g_utf8_strup(s1, -1); | |
2397 us2 = g_utf8_strup(s2, -1); | |
2398 ret = g_utf8_collate(us1, us2); | |
2399 g_free(us1); | |
2400 g_free(us2); | |
2401 | |
2402 return ret; | |
2403 } | |
2404 | |
2405 static int | |
15822 | 2406 blist_node_compare_status(PurpleBlistNode *n1, PurpleBlistNode *n2) |
15817 | 2407 { |
2408 int ret; | |
2409 | |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2410 if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) |
17240
29b3dc9cc8c5
It's valid for different types to be compared. In that case, use existing positions.
Richard Nelson <wabz@pidgin.im>
parents:
17203
diff
changeset
|
2411 return blist_node_compare_position(n1, n2); |
15817 | 2412 |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2413 switch (purple_blist_node_get_type(n1)) { |
15822 | 2414 case PURPLE_BLIST_CONTACT_NODE: |
2415 n1 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n1); | |
2416 n2 = (PurpleBlistNode*)purple_contact_get_priority_buddy((PurpleContact*)n2); | |
15817 | 2417 /* now compare the presence of the priority buddies */ |
15822 | 2418 case PURPLE_BLIST_BUDDY_NODE: |
2419 ret = purple_presence_compare(purple_buddy_get_presence((PurpleBuddy*)n1), | |
2420 purple_buddy_get_presence((PurpleBuddy*)n2)); | |
15817 | 2421 if (ret != 0) |
2422 return ret; | |
2423 break; | |
2424 default: | |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2425 return blist_node_compare_position(n1, n2); |
15817 | 2426 break; |
2427 } | |
2428 | |
2429 /* Sort alphabetically if presence is not comparable */ | |
2430 ret = blist_node_compare_text(n1, n2); | |
2431 | |
2432 return ret; | |
2433 } | |
2434 | |
2435 static int | |
15822 | 2436 get_contact_log_size(PurpleBlistNode *c) |
15817 | 2437 { |
2438 int log = 0; | |
15822 | 2439 PurpleBlistNode *node; |
15817 | 2440 |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
2441 for (node = purple_blist_node_get_first_child(c); node; node = purple_blist_node_get_sibling_next(node)) { |
15822 | 2442 PurpleBuddy *b = (PurpleBuddy*)node; |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2443 log += purple_log_get_total_size(PURPLE_LOG_IM, purple_buddy_get_name(b), |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2444 purple_buddy_get_account(b)); |
15817 | 2445 } |
2446 | |
2447 return log; | |
2448 } | |
2449 | |
2450 static int | |
15822 | 2451 blist_node_compare_log(PurpleBlistNode *n1, PurpleBlistNode *n2) |
15817 | 2452 { |
2453 int ret; | |
15822 | 2454 PurpleBuddy *b1, *b2; |
15817 | 2455 |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2456 if (purple_blist_node_get_type(n1) != purple_blist_node_get_type(n2)) |
17240
29b3dc9cc8c5
It's valid for different types to be compared. In that case, use existing positions.
Richard Nelson <wabz@pidgin.im>
parents:
17203
diff
changeset
|
2457 return blist_node_compare_position(n1, n2); |
15817 | 2458 |
22212
6bb29f94862c
Add API so Finch doesn't need to touch the internals of PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22192
diff
changeset
|
2459 switch (purple_blist_node_get_type(n1)) { |
15822 | 2460 case PURPLE_BLIST_BUDDY_NODE: |
2461 b1 = (PurpleBuddy*)n1; | |
2462 b2 = (PurpleBuddy*)n2; | |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2463 ret = purple_log_get_total_size(PURPLE_LOG_IM, purple_buddy_get_name(b2), purple_buddy_get_account(b2)) - |
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2464 purple_log_get_total_size(PURPLE_LOG_IM, purple_buddy_get_name(b1), purple_buddy_get_account(b1)); |
15817 | 2465 if (ret != 0) |
2466 return ret; | |
2467 break; | |
15822 | 2468 case PURPLE_BLIST_CONTACT_NODE: |
15817 | 2469 ret = get_contact_log_size(n2) - get_contact_log_size(n1); |
2470 if (ret != 0) | |
2471 return ret; | |
2472 break; | |
2473 default: | |
16483
0b97b224a829
Never change the orders of chats or the groups.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16439
diff
changeset
|
2474 return blist_node_compare_position(n1, n2); |
15817 | 2475 } |
2476 ret = blist_node_compare_text(n1, n2); | |
2477 return ret; | |
2478 } | |
2479 | |
2480 static void | |
2481 plugin_action(GntMenuItem *item, gpointer data) | |
2482 { | |
15822 | 2483 PurplePluginAction *action = data; |
15817 | 2484 if (action && action->callback) |
2485 action->callback(action); | |
2486 } | |
2487 | |
2488 static void | |
15822 | 2489 build_plugin_actions(GntMenuItem *item, PurplePlugin *plugin, gpointer context) |
15817 | 2490 { |
2491 GntWidget *sub = gnt_menu_new(GNT_MENU_POPUP); | |
2492 GList *actions; | |
2493 GntMenuItem *menuitem; | |
2494 | |
2495 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); | |
15822 | 2496 for (actions = PURPLE_PLUGIN_ACTIONS(plugin, context); actions; |
15817 | 2497 actions = g_list_delete_link(actions, actions)) { |
2498 if (actions->data) { | |
15822 | 2499 PurplePluginAction *action = actions->data; |
15817 | 2500 action->plugin = plugin; |
2501 action->context = context; | |
2502 menuitem = gnt_menuitem_new(action->label); | |
2503 gnt_menu_add_item(GNT_MENU(sub), menuitem); | |
2504 | |
2505 gnt_menuitem_set_callback(menuitem, plugin_action, action); | |
2506 g_object_set_data_full(G_OBJECT(menuitem), "plugin_action", | |
15822 | 2507 action, (GDestroyNotify)purple_plugin_action_free); |
15817 | 2508 } |
2509 } | |
2510 } | |
2511 | |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2512 static gboolean |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2513 buddy_recent_signed_on_off(gpointer data) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2514 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2515 PurpleBlistNode *node = data; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
2516 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2517 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2518 purple_timeout_remove(fnode->signed_timer); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2519 fnode->signed_timer = 0; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2520 |
22181
8509419a666c
Rework some of the code that deals with adding and removing blist nodes in the tree. There were some typoed code that just happened to work. This fixes those.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22178
diff
changeset
|
2521 if (!ggblist->manager->can_add_node(node)) { |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2522 node_remove(purple_get_blist(), node); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2523 } else { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2524 update_node_display(node, ggblist); |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
2525 if (purple_blist_node_get_parent(node) && PURPLE_BLIST_NODE_IS_CONTACT(purple_blist_node_get_parent(node))) |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
2526 update_node_display(purple_blist_node_get_parent(node), ggblist); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2527 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2528 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2529 return FALSE; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2530 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2531 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2532 static gboolean |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2533 buddy_signed_on_off_cb(gpointer data) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2534 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2535 PurpleBlistNode *node = data; |
22217
ad357ca94de9
We will probably eventually use purple_object_[get|set]_ui_data. Until then, this will do.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22214
diff
changeset
|
2536 FinchBlistNode *fnode = FINCH_GET_DATA(node); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2537 if (!ggblist || !fnode) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2538 return FALSE; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2539 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2540 if (fnode->signed_timer) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2541 purple_timeout_remove(fnode->signed_timer); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2542 fnode->signed_timer = purple_timeout_add_seconds(6, (GSourceFunc)buddy_recent_signed_on_off, data); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2543 update_node_display(node, ggblist); |
22168
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
2544 if (purple_blist_node_get_parent(node) && PURPLE_BLIST_NODE_IS_CONTACT(purple_blist_node_get_parent(node))) |
2bff44d78523
Add some accessor functions for PurpleBlistNode.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22012
diff
changeset
|
2545 update_node_display(purple_blist_node_get_parent(node), ggblist); |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2546 return FALSE; |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2547 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2548 |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2549 static void |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2550 buddy_signed_on_off(PurpleBuddy* buddy, gpointer null) |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2551 { |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2552 g_idle_add(buddy_signed_on_off_cb, buddy); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2553 } |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
2554 |
15817 | 2555 static void |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
2556 reconstruct_plugins_menu(void) |
15817 | 2557 { |
2558 GntWidget *sub; | |
2559 GntMenuItem *plg; | |
2560 GList *iter; | |
2561 | |
2562 if (!ggblist) | |
2563 return; | |
2564 | |
2565 if (ggblist->plugins == NULL) | |
2566 ggblist->plugins = gnt_menuitem_new(_("Plugins")); | |
2567 | |
2568 plg = ggblist->plugins; | |
2569 sub = gnt_menu_new(GNT_MENU_POPUP); | |
2570 gnt_menuitem_set_submenu(plg, GNT_MENU(sub)); | |
2571 | |
15822 | 2572 for (iter = purple_plugins_get_loaded(); iter; iter = iter->next) { |
2573 PurplePlugin *plugin = iter->data; | |
15817 | 2574 GntMenuItem *item; |
15822 | 2575 if (PURPLE_IS_PROTOCOL_PLUGIN(plugin)) |
15817 | 2576 continue; |
2577 | |
15822 | 2578 if (!PURPLE_PLUGIN_HAS_ACTIONS(plugin)) |
15817 | 2579 continue; |
2580 | |
2581 item = gnt_menuitem_new(_(plugin->info->name)); | |
2582 gnt_menu_add_item(GNT_MENU(sub), item); | |
2583 build_plugin_actions(item, plugin, NULL); | |
2584 } | |
2585 } | |
2586 | |
2587 static void | |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
2588 reconstruct_accounts_menu(void) |
15817 | 2589 { |
2590 GntWidget *sub; | |
2591 GntMenuItem *acc, *item; | |
2592 GList *iter; | |
2593 | |
2594 if (!ggblist) | |
2595 return; | |
2596 | |
2597 if (ggblist->accounts == NULL) | |
2598 ggblist->accounts = gnt_menuitem_new(_("Accounts")); | |
2599 | |
2600 acc = ggblist->accounts; | |
2601 sub = gnt_menu_new(GNT_MENU_POPUP); | |
2602 gnt_menuitem_set_submenu(acc, GNT_MENU(sub)); | |
2603 | |
15822 | 2604 for (iter = purple_accounts_get_all_active(); iter; |
15817 | 2605 iter = g_list_delete_link(iter, iter)) { |
15822 | 2606 PurpleAccount *account = iter->data; |
2607 PurpleConnection *gc = purple_account_get_connection(account); | |
2608 PurplePlugin *prpl; | |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2609 |
15822 | 2610 if (!gc || !PURPLE_CONNECTION_IS_CONNECTED(gc)) |
15817 | 2611 continue; |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
2612 prpl = purple_connection_get_prpl(gc); |
15817 | 2613 |
15822 | 2614 if (PURPLE_PLUGIN_HAS_ACTIONS(prpl)) { |
2615 item = gnt_menuitem_new(purple_account_get_username(account)); | |
15817 | 2616 gnt_menu_add_item(GNT_MENU(sub), item); |
2617 build_plugin_actions(item, prpl, gc); | |
2618 } | |
2619 } | |
2620 } | |
2621 | |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2622 static void |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2623 reconstruct_grouping_menu(void) |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2624 { |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2625 GList *iter; |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2626 GntWidget *subsub; |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2627 |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2628 if (!ggblist || !ggblist->grouping) |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2629 return; |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2630 |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2631 subsub = gnt_menu_new(GNT_MENU_POPUP); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2632 gnt_menuitem_set_submenu(ggblist->grouping, GNT_MENU(subsub)); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2633 |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2634 for (iter = managers; iter; iter = iter->next) { |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2635 char menuid[128]; |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2636 FinchBlistManager *manager = iter->data; |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2637 GntMenuItem *item = gnt_menuitem_new(_(manager->name)); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2638 snprintf(menuid, sizeof(menuid), "grouping-%s", manager->id); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2639 gnt_menuitem_set_id(GNT_MENU_ITEM(item), menuid); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2640 gnt_menu_add_item(GNT_MENU(subsub), item); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2641 g_object_set_data_full(G_OBJECT(item), "grouping-id", g_strdup(manager->id), g_free); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2642 gnt_menuitem_set_callback(item, menu_group_set_cb, NULL); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2643 } |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2644 } |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
2645 |
19375
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2646 static gboolean |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2647 auto_join_chats(gpointer data) |
15817 | 2648 { |
15822 | 2649 PurpleBlistNode *node; |
19375
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2650 PurpleConnection *pc = data; |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2651 PurpleAccount *account = purple_connection_get_account(pc); |
15817 | 2652 |
15822 | 2653 for (node = purple_blist_get_root(); node; |
2654 node = purple_blist_node_next(node, FALSE)) { | |
2655 if (PURPLE_BLIST_NODE_IS_CHAT(node)) { | |
2656 PurpleChat *chat = (PurpleChat*)node; | |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2657 if (purple_chat_get_account(chat) == account && |
16771
d7ad8013b914
Fix this spectacularly braindead code. I must've been on the good stuff when I wrote this. Fixes #364.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16655
diff
changeset
|
2658 purple_blist_node_get_bool(node, "gnt-autojoin")) |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2659 serv_join_chat(purple_account_get_connection(account), purple_chat_get_components(chat)); |
15817 | 2660 } |
2661 } | |
19375
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2662 return FALSE; |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2663 } |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2664 |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2665 static void |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2666 account_signed_on_cb(PurpleConnection *gc, gpointer null) |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2667 { |
f520bf6dd4bc
I think this fixes the auto-rejoin-after-auto-reconnect bug in finch.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
19305
diff
changeset
|
2668 g_idle_add(auto_join_chats, gc); |
15817 | 2669 } |
18442
6d8aed4adcd6
Minor changes to remove a couple of lines of duplication.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18441
diff
changeset
|
2670 |
6d8aed4adcd6
Minor changes to remove a couple of lines of duplication.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18441
diff
changeset
|
2671 static void toggle_pref_cb(GntMenuItem *item, gpointer n) |
18441
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
2672 { |
18442
6d8aed4adcd6
Minor changes to remove a couple of lines of duplication.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18441
diff
changeset
|
2673 purple_prefs_set_bool(n, !purple_prefs_get_bool(n)); |
15817 | 2674 } |
2675 | |
2676 static void sort_blist_change_cb(GntMenuItem *item, gpointer n) | |
2677 { | |
15822 | 2678 purple_prefs_set_string(PREF_ROOT "/sort_type", n); |
15817 | 2679 } |
2680 | |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2681 static void |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2682 block_select_cb(gpointer data, PurpleRequestFields *fields) |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2683 { |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2684 PurpleAccount *account = purple_request_fields_get_account(fields, "account"); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2685 const char *name = purple_request_fields_get_string(fields, "screenname"); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2686 if (account && name && *name != '\0') { |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2687 if (purple_request_fields_get_choice(fields, "block") == 1) { |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2688 purple_privacy_deny(account, name, FALSE, FALSE); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2689 } else { |
22251 | 2690 purple_privacy_allow(account, name, FALSE, FALSE); |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2691 } |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2692 } |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2693 } |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2694 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2695 static void |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2696 block_select(GntMenuItem *item, gpointer n) |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2697 { |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2698 PurpleRequestFields *fields; |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2699 PurpleRequestFieldGroup *group; |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2700 PurpleRequestField *field; |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2701 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2702 fields = purple_request_fields_new(); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2703 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2704 group = purple_request_field_group_new(NULL); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2705 purple_request_fields_add_group(fields, group); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2706 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2707 field = purple_request_field_string_new("screenname", _("Name"), NULL, FALSE); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2708 purple_request_field_set_type_hint(field, "screenname"); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2709 purple_request_field_set_required(field, TRUE); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2710 purple_request_field_group_add_field(group, field); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2711 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2712 field = purple_request_field_account_new("account", _("Account"), NULL); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2713 purple_request_field_set_type_hint(field, "account"); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2714 purple_request_field_set_visible(field, |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2715 (purple_connections_get_all() != NULL && |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2716 purple_connections_get_all()->next != NULL)); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2717 purple_request_field_set_required(field, TRUE); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2718 purple_request_field_group_add_field(group, field); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2719 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2720 field = purple_request_field_choice_new("block", _("Block/Unblock"), 1); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2721 purple_request_field_choice_add(field, _("Block")); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2722 purple_request_field_choice_add(field, _("Unblock")); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2723 purple_request_field_group_add_field(group, field); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2724 |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2725 purple_request_fields(purple_get_blist(), _("Block/Unblock"), |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2726 NULL, |
22794
cc8903c59d6b
Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <mark@kingant.net>
parents:
22786
diff
changeset
|
2727 _("Please enter the username or alias of the person " |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2728 "you would like to Block/Unblock."), |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2729 fields, |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2730 _("OK"), G_CALLBACK(block_select_cb), |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2731 _("Cancel"), NULL, |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2732 NULL, NULL, NULL, |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2733 NULL); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2734 } |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2735 |
18428
1dbd8ce2f11f
Fix a bug where buddies from offline accounts were showing up.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18345
diff
changeset
|
2736 /* send_im_select* -- Xerox */ |
15817 | 2737 static void |
15822 | 2738 send_im_select_cb(gpointer data, PurpleRequestFields *fields) |
15817 | 2739 { |
15822 | 2740 PurpleAccount *account; |
15817 | 2741 const char *username; |
22429
b0b8c94118c8
Make sure an existing conversation selected from the 'Send IM' dialog is given the focus.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22356
diff
changeset
|
2742 PurpleConversation *conv; |
15817 | 2743 |
15822 | 2744 account = purple_request_fields_get_account(fields, "account"); |
2745 username = purple_request_fields_get_string(fields, "screenname"); | |
15817 | 2746 |
22429
b0b8c94118c8
Make sure an existing conversation selected from the 'Send IM' dialog is given the focus.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22356
diff
changeset
|
2747 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, username); |
b0b8c94118c8
Make sure an existing conversation selected from the 'Send IM' dialog is given the focus.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22356
diff
changeset
|
2748 purple_conversation_present(conv); |
15817 | 2749 } |
2750 | |
2751 static void | |
2752 send_im_select(GntMenuItem *item, gpointer n) | |
2753 { | |
15822 | 2754 PurpleRequestFields *fields; |
2755 PurpleRequestFieldGroup *group; | |
2756 PurpleRequestField *field; | |
15817 | 2757 |
15822 | 2758 fields = purple_request_fields_new(); |
15817 | 2759 |
15822 | 2760 group = purple_request_field_group_new(NULL); |
2761 purple_request_fields_add_group(fields, group); | |
15817 | 2762 |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2763 field = purple_request_field_string_new("screenname", _("Name"), NULL, FALSE); |
15822 | 2764 purple_request_field_set_type_hint(field, "screenname"); |
2765 purple_request_field_set_required(field, TRUE); | |
2766 purple_request_field_group_add_field(group, field); | |
15817 | 2767 |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2768 field = purple_request_field_account_new("account", _("Account"), NULL); |
15822 | 2769 purple_request_field_set_type_hint(field, "account"); |
2770 purple_request_field_set_visible(field, | |
2771 (purple_connections_get_all() != NULL && | |
2772 purple_connections_get_all()->next != NULL)); | |
2773 purple_request_field_set_required(field, TRUE); | |
2774 purple_request_field_group_add_field(group, field); | |
15817 | 2775 |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
2776 purple_request_fields(purple_get_blist(), _("New Instant Message"), |
15817 | 2777 NULL, |
22794
cc8903c59d6b
Change the string "screen name" to "username" everywhere. I think most
Mark Doliner <mark@kingant.net>
parents:
22786
diff
changeset
|
2778 _("Please enter the username or alias of the person " |
15817 | 2779 "you would like to IM."), |
2780 fields, | |
2781 _("OK"), G_CALLBACK(send_im_select_cb), | |
2782 _("Cancel"), NULL, | |
16439
08db93bbd798
Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evan.s@dreskin.net>
parents:
16424
diff
changeset
|
2783 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
2784 NULL); |
15817 | 2785 } |
2786 | |
2787 static void | |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2788 join_chat_select_cb(gpointer data, PurpleRequestFields *fields) |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2789 { |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2790 PurpleAccount *account; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2791 const char *name; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2792 PurpleConnection *gc; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2793 PurpleChat *chat; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2794 GHashTable *hash = NULL; |
23279
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2795 PurpleConversation *conv; |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2796 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2797 account = purple_request_fields_get_account(fields, "account"); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2798 name = purple_request_fields_get_string(fields, "chat"); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2799 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2800 if (!purple_account_is_connected(account)) |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2801 return; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2802 |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
2803 gc = purple_account_get_connection(account); |
23279
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2804 /* Create a new conversation now. This will give focus to the new window. |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2805 * But it's necessary to pretend that we left the chat, because otherwise |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2806 * a new conversation window will pop up when we finally join the chat. */ |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2807 if (!(conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_CHAT, name, account))) { |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2808 conv = purple_conversation_new(PURPLE_CONV_TYPE_CHAT, account, name); |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2809 purple_conv_chat_left(PURPLE_CONV_CHAT(conv)); |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2810 } else { |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2811 purple_conversation_present(conv); |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2812 } |
a601807bae2b
Fix chat joining from the 'Join a chat' dialog. Thanks to w00b on IRC for
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22840
diff
changeset
|
2813 |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2814 chat = purple_blist_find_chat(account, name); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2815 if (chat == NULL) { |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
2816 PurplePluginProtocolInfo *info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); |
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
2817 if (info->chat_info_defaults != NULL) |
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22213
diff
changeset
|
2818 hash = info->chat_info_defaults(gc, name); |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2819 } else { |
22219
797230b3e48e
Add accessor and update finch to not touch the internals of PurpleBuddy and PurpleChat.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22217
diff
changeset
|
2820 hash = purple_chat_get_components(chat); |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2821 } |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2822 serv_join_chat(gc, hash); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2823 if (chat == NULL && hash != NULL) |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2824 g_hash_table_destroy(hash); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2825 } |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2826 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2827 static void |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2828 join_chat_select(GntMenuItem *item, gpointer n) |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2829 { |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2830 PurpleRequestFields *fields; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2831 PurpleRequestFieldGroup *group; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2832 PurpleRequestField *field; |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2833 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2834 fields = purple_request_fields_new(); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2835 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2836 group = purple_request_field_group_new(NULL); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2837 purple_request_fields_add_group(fields, group); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2838 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2839 field = purple_request_field_string_new("chat", _("Channel"), NULL, FALSE); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2840 purple_request_field_set_required(field, TRUE); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2841 purple_request_field_group_add_field(group, field); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2842 |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2843 field = purple_request_field_account_new("account", _("Account"), NULL); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2844 purple_request_field_set_type_hint(field, "account"); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2845 purple_request_field_set_visible(field, |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2846 (purple_connections_get_all() != NULL && |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2847 purple_connections_get_all()->next != NULL)); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2848 purple_request_field_set_required(field, TRUE); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2849 purple_request_field_group_add_field(group, field); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2850 |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
2851 purple_request_fields(purple_get_blist(), _("Join a Chat"), |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2852 NULL, |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2853 _("Please enter the name of the chat you want to join."), |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2854 fields, |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2855 _("Join"), G_CALLBACK(join_chat_select_cb), |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2856 _("Cancel"), NULL, |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2857 NULL, NULL, NULL, |
21099
51cf02dbdb0e
disapproval of revision 'c484d979c4fda4433a9633ff8b69bd8a395c9479'
Richard Laager <rlaager@wiktel.com>
parents:
21095
diff
changeset
|
2858 NULL); |
15817 | 2859 } |
2860 | |
2861 static void | |
22840
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2862 view_log_select_cb(gpointer data, PurpleRequestFields *fields) |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2863 { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2864 PurpleAccount *account; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2865 const char *name; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2866 PurpleBuddy *buddy; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2867 PurpleContact *contact; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2868 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2869 account = purple_request_fields_get_account(fields, "account"); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2870 name = purple_request_fields_get_string(fields, "screenname"); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2871 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2872 buddy = purple_find_buddy(account, name); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2873 if (buddy) { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2874 contact = purple_buddy_get_contact(buddy); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2875 } else { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2876 contact = NULL; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2877 } |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2878 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2879 if (contact) { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2880 finch_log_show_contact(contact); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2881 } else { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2882 finch_log_show(PURPLE_LOG_IM, name, account); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2883 } |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2884 } |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2885 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2886 static void |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2887 view_log_cb(GntMenuItem *item, gpointer n) |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2888 { |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2889 PurpleRequestFields *fields; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2890 PurpleRequestFieldGroup *group; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2891 PurpleRequestField *field; |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2892 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2893 fields = purple_request_fields_new(); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2894 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2895 group = purple_request_field_group_new(NULL); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2896 purple_request_fields_add_group(fields, group); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2897 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2898 field = purple_request_field_string_new("screenname", _("Name"), NULL, FALSE); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2899 purple_request_field_set_type_hint(field, "screenname-all"); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2900 purple_request_field_set_required(field, TRUE); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2901 purple_request_field_group_add_field(group, field); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2902 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2903 field = purple_request_field_account_new("account", _("Account"), NULL); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2904 purple_request_field_set_type_hint(field, "account"); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2905 purple_request_field_set_visible(field, |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2906 (purple_accounts_get_all() != NULL && |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2907 purple_accounts_get_all()->next != NULL)); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2908 purple_request_field_set_required(field, TRUE); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2909 purple_request_field_group_add_field(group, field); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2910 purple_request_field_account_set_show_all(field, TRUE); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2911 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2912 purple_request_fields(purple_get_blist(), _("View Log"), |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2913 NULL, |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2914 _("Please enter the username or alias of the person " |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2915 "whose log you would like to view."), |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2916 fields, |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2917 _("OK"), G_CALLBACK(view_log_select_cb), |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2918 _("Cancel"), NULL, |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2919 NULL, NULL, NULL, |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2920 NULL); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2921 } |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2922 |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2923 static void |
23288
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2924 view_all_logs_cb(GntMenuItem *item, gpointer n) |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2925 { |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2926 finch_log_show(PURPLE_LOG_IM, NULL, NULL); |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2927 } |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2928 |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2929 static void |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2930 menu_add_buddy_cb(GntMenuItem *item, gpointer null) |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2931 { |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2932 purple_blist_request_add_buddy(NULL, NULL, NULL, NULL); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2933 } |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2934 |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2935 static void |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2936 menu_add_chat_cb(GntMenuItem *item, gpointer null) |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2937 { |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2938 purple_blist_request_add_chat(NULL, NULL, NULL, NULL); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2939 } |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2940 |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2941 static void |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2942 menu_add_group_cb(GntMenuItem *item, gpointer null) |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2943 { |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2944 purple_blist_request_add_group(); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2945 } |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2946 |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2947 static void |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2948 menu_group_set_cb(GntMenuItem *item, gpointer null) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2949 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2950 const char *id = g_object_get_data(G_OBJECT(item), "grouping-id"); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
2951 purple_prefs_set_string(PREF_ROOT "/grouping", id); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2952 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2953 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
2954 static void |
22007
c38d72677c8a
Probe for -Wstrict-prototypes to get some more warnings. I then cleaned up
Richard Laager <rlaager@wiktel.com>
parents:
21738
diff
changeset
|
2955 create_menu(void) |
15817 | 2956 { |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2957 GntWidget *menu, *sub, *subsub; |
15817 | 2958 GntMenuItem *item; |
2959 GntWindow *window; | |
2960 | |
2961 if (!ggblist) | |
2962 return; | |
2963 | |
2964 window = GNT_WINDOW(ggblist->window); | |
2965 ggblist->menu = menu = gnt_menu_new(GNT_MENU_TOPLEVEL); | |
2966 gnt_window_set_menu(window, GNT_MENU(menu)); | |
2967 | |
2968 item = gnt_menuitem_new(_("Options")); | |
2969 gnt_menu_add_item(GNT_MENU(menu), item); | |
2970 | |
2971 sub = gnt_menu_new(GNT_MENU_POPUP); | |
2972 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); | |
2973 | |
2974 item = gnt_menuitem_new(_("Send IM...")); | |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
2975 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "send-im"); |
15817 | 2976 gnt_menu_add_item(GNT_MENU(sub), item); |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
2977 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), send_im_select, NULL); |
15817 | 2978 |
22250
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2979 item = gnt_menuitem_new(_("Block/Unblock...")); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2980 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "block-unblock"); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2981 gnt_menu_add_item(GNT_MENU(sub), item); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2982 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), block_select, NULL); |
9b620ed4fbc4
Add a [X] Blocked item to the buddy context menu, and add a dialog to
Richard Nelson <wabz@pidgin.im>
parents:
22248
diff
changeset
|
2983 |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2984 item = gnt_menuitem_new(_("Join Chat...")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
2985 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "join-chat"); |
20739
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2986 gnt_menu_add_item(GNT_MENU(sub), item); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2987 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), join_chat_select, NULL); |
3f9520e09805
Add a 'Join Chat...' item in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20625
diff
changeset
|
2988 |
22840
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2989 item = gnt_menuitem_new(_("View Log...")); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2990 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "view-log"); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2991 gnt_menu_add_item(GNT_MENU(sub), item); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2992 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), view_log_cb, NULL); |
04e0d8677b9a
Add a 'View log' option in the buddylist menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22838
diff
changeset
|
2993 |
23288
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2994 item = gnt_menuitem_new(_("View All Logs")); |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2995 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "view-all-logs"); |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2996 gnt_menu_add_item(GNT_MENU(sub), item); |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2997 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), view_all_logs_cb, NULL); |
5f9793c8510a
Added "View All Logs" menu in the buddylist to display a list of all IM
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
23279
diff
changeset
|
2998 |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
2999 item = gnt_menuitem_new(_("Show")); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3000 gnt_menu_add_item(GNT_MENU(sub), item); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3001 subsub = gnt_menu_new(GNT_MENU_POPUP); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3002 gnt_menuitem_set_submenu(item, GNT_MENU(subsub)); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3003 |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3004 item = gnt_menuitem_check_new(_("Empty groups")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3005 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "show-empty-groups"); |
18441
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
3006 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), |
24ecab0d40b3
Plucked revision from im.pidgin.soc.2007.finchfeat to allow showing empty
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18437
diff
changeset
|
3007 purple_prefs_get_bool(PREF_ROOT "/emptygroups")); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3008 gnt_menu_add_item(GNT_MENU(subsub), item); |
18442
6d8aed4adcd6
Minor changes to remove a couple of lines of duplication.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18441
diff
changeset
|
3009 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), toggle_pref_cb, PREF_ROOT "/emptygroups"); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3010 |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3011 item = gnt_menuitem_check_new(_("Offline buddies")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3012 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "show-offline-buddies"); |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
3013 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), |
15822 | 3014 purple_prefs_get_bool(PREF_ROOT "/showoffline")); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3015 gnt_menu_add_item(GNT_MENU(subsub), item); |
18442
6d8aed4adcd6
Minor changes to remove a couple of lines of duplication.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18441
diff
changeset
|
3016 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), toggle_pref_cb, PREF_ROOT "/showoffline"); |
15817 | 3017 |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3018 item = gnt_menuitem_new(_("Sort")); |
15817 | 3019 gnt_menu_add_item(GNT_MENU(sub), item); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3020 subsub = gnt_menu_new(GNT_MENU_POPUP); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3021 gnt_menuitem_set_submenu(item, GNT_MENU(subsub)); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3022 |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3023 item = gnt_menuitem_new(_("By Status")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3024 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "sort-status"); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3025 gnt_menu_add_item(GNT_MENU(subsub), item); |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
3026 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "status"); |
15817 | 3027 |
20597
591267f6f1d5
propagate from branch 'im.pidgin.pidgin' (head 025faf23aaac403798451974c320c4de6df470d5)
Gabriel Schulhof <nix@go-nix.ca>
diff
changeset
|
3028 item = gnt_menuitem_new(_("Alphabetically")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3029 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "sort-alpha"); |
20597
591267f6f1d5
propagate from branch 'im.pidgin.pidgin' (head 025faf23aaac403798451974c320c4de6df470d5)
Gabriel Schulhof <nix@go-nix.ca>
diff
changeset
|
3030 gnt_menu_add_item(GNT_MENU(subsub), item); |
15928
f00f2e283ffb
Some define changes. This helps in generating the python bindings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15870
diff
changeset
|
3031 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "text"); |
15817 | 3032 |
20604
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3033 item = gnt_menuitem_new(_("By Log Size")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3034 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "sort-log"); |
20604
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3035 gnt_menu_add_item(GNT_MENU(subsub), item); |
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3036 gnt_menuitem_set_callback(GNT_MENU_ITEM(item), sort_blist_change_cb, "log"); |
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3037 |
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3038 item = gnt_menuitem_new(_("Add")); |
15817 | 3039 gnt_menu_add_item(GNT_MENU(sub), item); |
20604
6c6fd163a992
Restoring gntblist.c:create_menu
Gabriel Schulhof <nix@go-nix.ca>
parents:
20603
diff
changeset
|
3040 |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3041 subsub = gnt_menu_new(GNT_MENU_POPUP); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3042 gnt_menuitem_set_submenu(item, GNT_MENU(subsub)); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3043 |
22174
18ad08694be4
Mark some strings for translation.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22172
diff
changeset
|
3044 item = gnt_menuitem_new(_("Buddy")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3045 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "add-buddy"); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3046 gnt_menu_add_item(GNT_MENU(subsub), item); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3047 gnt_menuitem_set_callback(item, menu_add_buddy_cb, NULL); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3048 |
22174
18ad08694be4
Mark some strings for translation.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22172
diff
changeset
|
3049 item = gnt_menuitem_new(_("Chat")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3050 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "add-chat"); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3051 gnt_menu_add_item(GNT_MENU(subsub), item); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3052 gnt_menuitem_set_callback(item, menu_add_chat_cb, NULL); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3053 |
22174
18ad08694be4
Mark some strings for translation.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22172
diff
changeset
|
3054 item = gnt_menuitem_new(_("Group")); |
21214
05bb2853f350
Add IDs to the menuitems in the buddylist menu so they can have acceletor keys.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20739
diff
changeset
|
3055 gnt_menuitem_set_id(GNT_MENU_ITEM(item), "add-group"); |
20561
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3056 gnt_menu_add_item(GNT_MENU(subsub), item); |
c7b2c6ae3bea
Re-arrange the menu. Add 'Add buddy/chat/group' in the menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
20074
diff
changeset
|
3057 gnt_menuitem_set_callback(item, menu_add_group_cb, NULL); |
15817 | 3058 |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3059 ggblist->grouping = item = gnt_menuitem_new(_("Grouping")); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3060 gnt_menu_add_item(GNT_MENU(sub), item); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3061 reconstruct_grouping_menu(); |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3062 |
15817 | 3063 reconstruct_accounts_menu(); |
3064 gnt_menu_add_item(GNT_MENU(menu), ggblist->accounts); | |
3065 | |
3066 reconstruct_plugins_menu(); | |
3067 gnt_menu_add_item(GNT_MENU(menu), ggblist->plugins); | |
3068 } | |
3069 | |
3070 void finch_blist_show() | |
3071 { | |
15822 | 3072 blist_show(purple_get_blist()); |
15817 | 3073 } |
3074 | |
3075 static void | |
16105
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3076 group_collapsed(GntWidget *widget, PurpleBlistNode *node, gboolean collapsed, gpointer null) |
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3077 { |
16106 | 3078 if (PURPLE_BLIST_NODE_IS_GROUP(node)) |
3079 purple_blist_node_set_bool(node, "collapsed", collapsed); | |
16105
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3080 } |
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3081 |
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3082 static void |
15822 | 3083 blist_show(PurpleBuddyList *list) |
15817 | 3084 { |
3085 if (ggblist == NULL) | |
3086 new_list(list); | |
18345
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18332
diff
changeset
|
3087 else if (ggblist->window) { |
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18332
diff
changeset
|
3088 gnt_window_present(ggblist->window); |
15817 | 3089 return; |
18345
2d4df5ef0090
If the action-windows are already there, then bring them to front when
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
18332
diff
changeset
|
3090 } |
15817 | 3091 |
3092 ggblist->window = gnt_vwindow_new(FALSE); | |
3093 gnt_widget_set_name(ggblist->window, "buddylist"); | |
3094 gnt_box_set_toplevel(GNT_BOX(ggblist->window), TRUE); | |
3095 gnt_box_set_title(GNT_BOX(ggblist->window), _("Buddy List")); | |
3096 gnt_box_set_pad(GNT_BOX(ggblist->window), 0); | |
3097 | |
3098 ggblist->tree = gnt_tree_new(); | |
3099 | |
3100 GNT_WIDGET_SET_FLAGS(ggblist->tree, GNT_WIDGET_NO_BORDER); | |
15822 | 3101 gnt_widget_set_size(ggblist->tree, purple_prefs_get_int(PREF_ROOT "/size/width"), |
3102 purple_prefs_get_int(PREF_ROOT "/size/height")); | |
3103 gnt_widget_set_position(ggblist->window, purple_prefs_get_int(PREF_ROOT "/position/x"), | |
3104 purple_prefs_get_int(PREF_ROOT "/position/y")); | |
15817 | 3105 |
3106 gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->tree); | |
3107 | |
3108 ggblist->status = gnt_combo_box_new(); | |
3109 gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->status); | |
3110 ggblist->statustext = gnt_entry_new(NULL); | |
3111 gnt_box_add_widget(GNT_BOX(ggblist->window), ggblist->statustext); | |
3112 | |
3113 gnt_widget_show(ggblist->window); | |
3114 | |
15822 | 3115 purple_signal_connect(purple_connections_get_handle(), "signed-on", finch_blist_get_handle(), |
3116 PURPLE_CALLBACK(reconstruct_accounts_menu), NULL); | |
3117 purple_signal_connect(purple_connections_get_handle(), "signed-off", finch_blist_get_handle(), | |
3118 PURPLE_CALLBACK(reconstruct_accounts_menu), NULL); | |
3119 purple_signal_connect(purple_blist_get_handle(), "buddy-status-changed", finch_blist_get_handle(), | |
3120 PURPLE_CALLBACK(buddy_status_changed), ggblist); | |
3121 purple_signal_connect(purple_blist_get_handle(), "buddy-idle-changed", finch_blist_get_handle(), | |
3122 PURPLE_CALLBACK(buddy_idle_changed), ggblist); | |
15817 | 3123 |
15822 | 3124 purple_signal_connect(purple_plugins_get_handle(), "plugin-load", finch_blist_get_handle(), |
3125 PURPLE_CALLBACK(reconstruct_plugins_menu), NULL); | |
3126 purple_signal_connect(purple_plugins_get_handle(), "plugin-unload", finch_blist_get_handle(), | |
3127 PURPLE_CALLBACK(reconstruct_plugins_menu), NULL); | |
15817 | 3128 |
21981
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
3129 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", finch_blist_get_handle(), |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
3130 PURPLE_CALLBACK(buddy_signed_on_off), ggblist); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
3131 purple_signal_connect(purple_blist_get_handle(), "buddy-signed-off", finch_blist_get_handle(), |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
3132 PURPLE_CALLBACK(buddy_signed_on_off), ggblist); |
05c2ef19e2fa
Blink the buddies that signed on/off recently for six seconds.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
21738
diff
changeset
|
3133 |
15817 | 3134 #if 0 |
3135 /* These I plan to use to indicate unread-messages etc. */ | |
15822 | 3136 purple_signal_connect(purple_conversations_get_handle(), "received-im-msg", finch_blist_get_handle(), |
3137 PURPLE_CALLBACK(received_im_msg), list); | |
3138 purple_signal_connect(purple_conversations_get_handle(), "sent-im-msg", finch_blist_get_handle(), | |
3139 PURPLE_CALLBACK(sent_im_msg), NULL); | |
15817 | 3140 |
15822 | 3141 purple_signal_connect(purple_conversations_get_handle(), "received-chat-msg", finch_blist_get_handle(), |
3142 PURPLE_CALLBACK(received_chat_msg), list); | |
15817 | 3143 #endif |
3144 | |
3145 g_signal_connect(G_OBJECT(ggblist->tree), "selection_changed", G_CALLBACK(selection_changed), ggblist); | |
3146 g_signal_connect(G_OBJECT(ggblist->tree), "key_pressed", G_CALLBACK(key_pressed), ggblist); | |
3147 g_signal_connect(G_OBJECT(ggblist->tree), "context-menu", G_CALLBACK(context_menu), ggblist); | |
16105
1983ecd15174
Remember the collapsed state of groups in the blist
Richard Nelson <wabz@pidgin.im>
parents:
15928
diff
changeset
|
3148 g_signal_connect(G_OBJECT(ggblist->tree), "collapse-toggled", G_CALLBACK(group_collapsed), NULL); |
15817 | 3149 g_signal_connect(G_OBJECT(ggblist->tree), "activate", G_CALLBACK(selection_activate), ggblist); |
3150 g_signal_connect_data(G_OBJECT(ggblist->tree), "gained-focus", G_CALLBACK(draw_tooltip), | |
3151 ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); | |
3152 g_signal_connect_data(G_OBJECT(ggblist->tree), "lost-focus", G_CALLBACK(remove_peripherals), | |
3153 ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); | |
17707
3c3fc1432a01
Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents:
16655
diff
changeset
|
3154 g_signal_connect_data(G_OBJECT(ggblist->window), "workspace-hidden", G_CALLBACK(remove_peripherals), |
3c3fc1432a01
Let windows know when the workspace they are in is being hidden/shown
Richard Nelson <wabz@pidgin.im>
parents:
16655
diff
changeset
|
3155 ggblist, 0, G_CONNECT_AFTER | G_CONNECT_SWAPPED); |
15817 | 3156 g_signal_connect(G_OBJECT(ggblist->tree), "size_changed", G_CALLBACK(size_changed_cb), NULL); |
3157 g_signal_connect(G_OBJECT(ggblist->window), "position_set", G_CALLBACK(save_position_cb), NULL); | |
3158 g_signal_connect(G_OBJECT(ggblist->window), "destroy", G_CALLBACK(reset_blist_window), NULL); | |
3159 | |
3160 /* Status signals */ | |
15822 | 3161 purple_signal_connect(purple_savedstatuses_get_handle(), "savedstatus-changed", finch_blist_get_handle(), |
3162 PURPLE_CALLBACK(savedstatus_changed), NULL); | |
15817 | 3163 g_signal_connect(G_OBJECT(ggblist->status), "selection_changed", |
3164 G_CALLBACK(status_selection_changed), NULL); | |
3165 g_signal_connect(G_OBJECT(ggblist->statustext), "key_pressed", | |
3166 G_CALLBACK(status_text_changed), NULL); | |
3167 | |
3168 create_menu(); | |
3169 | |
3170 populate_buddylist(); | |
3171 | |
15822 | 3172 savedstatus_changed(purple_savedstatus_get_current(), NULL); |
15817 | 3173 } |
3174 | |
3175 void finch_blist_uninit() | |
3176 { | |
3177 if (ggblist == NULL) | |
3178 return; | |
3179 | |
3180 gnt_widget_destroy(ggblist->window); | |
3181 g_free(ggblist); | |
3182 ggblist = NULL; | |
3183 } | |
3184 | |
3185 gboolean finch_blist_get_position(int *x, int *y) | |
3186 { | |
3187 if (!ggblist || !ggblist->window) | |
3188 return FALSE; | |
3189 gnt_widget_get_position(ggblist->window, x, y); | |
3190 return TRUE; | |
3191 } | |
3192 | |
3193 void finch_blist_set_position(int x, int y) | |
3194 { | |
3195 gnt_widget_set_position(ggblist->window, x, y); | |
3196 } | |
3197 | |
3198 gboolean finch_blist_get_size(int *width, int *height) | |
3199 { | |
3200 if (!ggblist || !ggblist->window) | |
3201 return FALSE; | |
3202 gnt_widget_get_size(ggblist->window, width, height); | |
3203 return TRUE; | |
3204 } | |
3205 | |
3206 void finch_blist_set_size(int width, int height) | |
3207 { | |
3208 gnt_widget_set_size(ggblist->window, width, height); | |
3209 } | |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3210 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3211 void finch_blist_install_manager(const FinchBlistManager *manager) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3212 { |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3213 if (!g_list_find(managers, manager)) { |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3214 managers = g_list_append(managers, (gpointer)manager); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3215 reconstruct_grouping_menu(); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
3216 if (strcmp(manager->id, purple_prefs_get_string(PREF_ROOT "/grouping")) == 0) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
3217 purple_prefs_trigger_callback(PREF_ROOT "/grouping"); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3218 } |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3219 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3220 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3221 void finch_blist_uninstall_manager(const FinchBlistManager *manager) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3222 { |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3223 if (g_list_find(managers, manager)) { |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3224 managers = g_list_remove(managers, manager); |
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3225 reconstruct_grouping_menu(); |
22178
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
3226 if (strcmp(manager->id, purple_prefs_get_string(PREF_ROOT "/grouping")) == 0) |
b0bce463aa4e
Remember the selected grouping option.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22177
diff
changeset
|
3227 purple_prefs_trigger_callback(PREF_ROOT "/grouping"); |
22177
71d0761fe572
Reconstruct the 'Grouping' menu when a blist manager is un/installed.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22174
diff
changeset
|
3228 } |
22171
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3229 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3230 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3231 FinchBlistManager * finch_blist_manager_find(const char *id) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3232 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3233 GList *iter = managers; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3234 if (!id) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3235 return NULL; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3236 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3237 for (; iter; iter = iter->next) { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3238 FinchBlistManager *m = iter->data; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3239 if (strcmp(id, m->id) == 0) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3240 return m; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3241 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3242 return NULL; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3243 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3244 |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3245 GntTree * finch_blist_get_tree(void) |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3246 { |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3247 return ggblist ? GNT_TREE(ggblist->tree) : NULL; |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3248 } |
2c9646c55369
Add a buddy list manager for finch. This allows plugins to show the buddylist
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22168
diff
changeset
|
3249 |