annotate finch/gntroomlist.c @ 22018:118046227581

This patch from Thanumalayan S. implements Yahoo protocol version 15 file transfer support. Currently sending multiple files from an official Yahoo client is treated as multiple individual transfers that must be accepted separately. This also changes things so that we identify as Yahoo Messenger version 8.0 (previously we were identifying as 6.0 or not at all). committer: John Bailey <rekkanoryo@rekkanoryo.org>
author Thanumalayan <madthanu@gmail.com>
date Sun, 06 Jan 2008 19:45:03 +0000
parents 1278280fa0b6
children d65fd48a3ad9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
1 /**
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
2 * @file gntroomlist.c GNT Room List API
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
3 * @ingroup finch
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
4 */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
5
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
6 /* finch
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
7 *
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
8 * Finch is the legal property of its developers, whose names are too numerous
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
10 * source distribution.
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
11 *
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
15 * (at your option) any later version.
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
16 *
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
20 * GNU General Public License for more details.
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
21 *
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
25 */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
26
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
27 #include"internal.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
28
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
29 #include "gntrequest.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
30 #include "gntroomlist.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
31
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
32 #include "gntbox.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
33 #include "gntbutton.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
34 #include "gntcombobox.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
35 #include "gnttextview.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
36 #include "gnttree.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
37 #include "gntwindow.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
38
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
39 #include "debug.h"
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
40
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
41 /* Yes, just one roomlist at a time. Let's not get greedy. Aight? */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
42 struct _FinchRoomlist
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
43 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
44 GntWidget *window;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
45
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
46 GntWidget *accounts;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
47 GntWidget *tree;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
48 GntWidget *details;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
49
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
50 GntWidget *getlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
51 GntWidget *add;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
52 GntWidget *join;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
53 GntWidget *stop;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
54 GntWidget *close;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
55
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
56 PurpleAccount *account;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
57 PurpleRoomlist *roomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
58 } froomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
59
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
60 typedef struct _FinchRoomlist FinchRoomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
61
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
62 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
63 unset_roomlist(gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
64 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
65 froomlist.window = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
66 if (froomlist.roomlist)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
67 purple_roomlist_unref(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
68 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
69
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
70 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
71 update_roomlist(PurpleRoomlist *list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
72 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
73 if (froomlist.roomlist == list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
74 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
75
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
76 if (froomlist.roomlist)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
77 purple_roomlist_unref(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
78
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
79 if ((froomlist.roomlist = list) != NULL)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
80 purple_roomlist_ref(list);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
81 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
82
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
83 static void fl_stop(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
84 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
85 if (froomlist.roomlist &&
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
86 purple_roomlist_get_in_progress(froomlist.roomlist))
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
87 purple_roomlist_cancel_get_list(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
88 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
89
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
90 static void fl_get_list(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
91 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
92 PurpleAccount *account = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(froomlist.accounts));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
93 PurpleConnection *gc = purple_account_get_connection(account);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
94
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
95 if (!gc)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
96 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
97
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
98 froomlist.roomlist = purple_roomlist_get_list(gc);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
99 gnt_box_give_focus_to_child(GNT_BOX(froomlist.window), froomlist.tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
100 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
101
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
102 static void fl_add_chat(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
103 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
104 char *name;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
105 PurpleRoomlistRoom *room = gnt_tree_get_selection_data(GNT_TREE(froomlist.tree));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
106 PurpleConnection *gc = purple_account_get_connection(froomlist.account);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
107 PurplePluginProtocolInfo *prpl_info = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
108
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
109 if (gc == NULL || room == NULL)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
110 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
111
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
112 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
113
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
114 if(prpl_info != NULL && prpl_info->roomlist_room_serialize)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
115 name = prpl_info->roomlist_room_serialize(room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
116 else
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
117 name = g_strdup(purple_roomlist_room_get_name(room));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
118
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
119 purple_blist_request_add_chat(froomlist.account, NULL, NULL, name);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
120
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
121 g_free(name);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
122 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
123
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
124 static void fl_close(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
125 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
126 gnt_widget_destroy(froomlist.window);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
127 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
128
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
129 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
130 roomlist_activated(GntWidget *widget)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
131 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
132 PurpleRoomlistRoom *room = gnt_tree_get_selection_data(GNT_TREE(widget));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
133 if (!room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
134 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
135
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
136 switch (purple_roomlist_room_get_type(room)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
137 case PURPLE_ROOMLIST_ROOMTYPE_ROOM:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
138 purple_roomlist_room_join(froomlist.roomlist, room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
139 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
140 case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
141 purple_roomlist_expand_category(froomlist.roomlist, room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
142 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
143 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
144 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
145
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
146 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
147 roomlist_selection_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
148 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
149 GList *iter, *field;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
150 PurpleRoomlistRoom *room = current;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
151 GntTextView *tv = GNT_TEXT_VIEW(froomlist.details);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
152 gboolean first = TRUE;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
153
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
154 gnt_text_view_clear(tv);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
155
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
156 if (!room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
157 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
158
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
159 for (iter = purple_roomlist_room_get_fields(room),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
160 field = purple_roomlist_get_fields(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
161 iter && field;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
162 iter = iter->next, field = field->next) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
163 PurpleRoomlistField *f = field->data;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
164 char *label = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
165
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
166 if (purple_roomlist_field_get_hidden(f)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
167 continue;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
168 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
169
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
170 if (!first)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
171 gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
172
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
173 gnt_text_view_append_text_with_flags(tv,
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
174 purple_roomlist_field_get_label(f), GNT_TEXT_FLAG_BOLD);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
175 gnt_text_view_append_text_with_flags(tv, ": ", GNT_TEXT_FLAG_BOLD);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
176
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
177 switch (purple_roomlist_field_get_type(f)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
178 case PURPLE_ROOMLIST_FIELD_BOOL:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
179 label = g_strdup(iter->data ? "True" : "False");
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
180 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
181 case PURPLE_ROOMLIST_FIELD_INT:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
182 label = g_strdup_printf("%d", (int)iter->data);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
183 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
184 case PURPLE_ROOMLIST_FIELD_STRING:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
185 label = g_strdup(iter->data);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
186 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
187 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
188 gnt_text_view_append_text_with_flags(tv, label, GNT_TEXT_FLAG_NORMAL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
189 g_free(label);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
190 first = FALSE;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
191 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
192
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
193 if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
194 gnt_text_view_append_text_with_flags(tv,
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
195 _("\nHit 'Enter' to find more rooms of this category."),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
196 GNT_TEXT_FLAG_NORMAL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
197 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
198 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
199
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
200 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
201 roomlist_account_changed(GntWidget *widget, gpointer old, gpointer current, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
202 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
203 if (froomlist.account == current) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
204 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
205 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
206
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
207 froomlist.account = current;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
208 if (froomlist.roomlist) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
209 if (purple_roomlist_get_in_progress(froomlist.roomlist))
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
210 purple_roomlist_cancel_get_list(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
211 update_roomlist(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
212 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
213
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
214 gnt_tree_remove_all(GNT_TREE(froomlist.tree));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
215 gnt_widget_draw(froomlist.tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
216 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
217
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
218 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
219 reset_account_list(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
220 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
221 GList *list;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
222 GntComboBox *accounts = GNT_COMBO_BOX(froomlist.accounts);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
223 gnt_combo_box_remove_all(accounts);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
224 for (list = purple_connections_get_all(); list; list = list->next) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
225 PurplePluginProtocolInfo *prpl_info = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
226 PurpleConnection *gc = list->data;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
227
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
228 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
229 if (prpl_info->roomlist_get_list != NULL) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
230 PurpleAccount *account = purple_connection_get_account(gc);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
231 char *text = g_strdup_printf("%s (%s)",
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
232 purple_account_get_username(account),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
233 purple_account_get_protocol_name(account));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
234 gnt_combo_box_add_data(accounts, account, text);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
235 g_free(text);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
236 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
237 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
238 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
239
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
240 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
241 setup_roomlist(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
242 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
243 GntWidget *window, *tree, *hbox, *accounts;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
244 int iter;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
245 struct {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
246 const char *label;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
247 GCallback callback;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
248 GntWidget **widget;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
249 } buttons[] = {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
250 {_("Stop"), G_CALLBACK(fl_stop), &froomlist.stop},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
251 {_("Get"), G_CALLBACK(fl_get_list), &froomlist.getlist},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
252 {_("Add"), G_CALLBACK(fl_add_chat), &froomlist.add},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
253 {_("Close"), G_CALLBACK(fl_close), &froomlist.close},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
254 {NULL, NULL, NULL}
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
255 };
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
256
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
257 if (froomlist.window)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
258 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
259
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
260 froomlist.window = window = gnt_window_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
261 g_object_set(G_OBJECT(window), "vertical", TRUE, NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
262 gnt_box_set_pad(GNT_BOX(window), 0);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
263 gnt_box_set_title(GNT_BOX(window), _("Room List"));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
264 gnt_box_set_alignment(GNT_BOX(window), GNT_ALIGN_MID);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
265
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
266 froomlist.accounts = accounts = gnt_combo_box_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
267 reset_account_list(account);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
268 gnt_box_add_widget(GNT_BOX(window), froomlist.accounts);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
269 g_signal_connect(G_OBJECT(froomlist.accounts), "selection-changed",
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
270 G_CALLBACK(roomlist_account_changed), NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
271 froomlist.account = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(froomlist.accounts));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
272
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
273 froomlist.tree = tree = gnt_tree_new_with_columns(2);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
274 gnt_tree_set_show_title(GNT_TREE(tree), TRUE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
275 g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(roomlist_activated), NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
276 gnt_tree_set_column_titles(GNT_TREE(tree), _("Name"), "");
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
277 gnt_tree_set_show_separator(GNT_TREE(tree), FALSE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
278 gnt_tree_set_col_width(GNT_TREE(tree), 1, 1);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
279 gnt_tree_set_column_resizable(GNT_TREE(tree), 1, FALSE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
280 gnt_tree_set_search_column(GNT_TREE(tree), 0);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
281
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
282 gnt_box_add_widget(GNT_BOX(window), tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
283
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
284 froomlist.details = gnt_text_view_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
285 gnt_text_view_set_flag(GNT_TEXT_VIEW(froomlist.details), GNT_TEXT_VIEW_TOP_ALIGN);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
286 gnt_box_add_widget(GNT_BOX(window), froomlist.details);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
287 gnt_widget_set_size(froomlist.details, -1, 10);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
288
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
289 hbox = gnt_hbox_new(FALSE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
290 gnt_box_add_widget(GNT_BOX(window), hbox);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
291
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
292 for (iter = 0; buttons[iter].label; iter++) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
293 GntWidget *button = gnt_button_new(buttons[iter].label);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
294 gnt_box_add_widget(GNT_BOX(hbox), button);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
295 g_signal_connect(G_OBJECT(button), "activate", buttons[iter].callback, NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
296 *buttons[iter].widget = button;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
297 gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(froomlist.details), button);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
298 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
299
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
300 g_signal_connect(G_OBJECT(tree), "selection-changed", G_CALLBACK(roomlist_selection_changed), NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
301
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
302 g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(unset_roomlist), NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
303 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
304
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
305 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
306 fl_show_with_account(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
307 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
308 setup_roomlist(account);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
309 gnt_window_present(froomlist.window);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
310 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
311
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
312 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
313 fl_create(PurpleRoomlist *list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
314 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
315 list->ui_data = &froomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
316 setup_roomlist(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
317 update_roomlist(list);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
318 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
319
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
320 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
321 fl_set_fields(PurpleRoomlist *list, GList *fields)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
322 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
323 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
324
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
325 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
326 fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
327 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
328 if (froomlist.roomlist != roomlist)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
329 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
330
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
331 gnt_tree_remove(GNT_TREE(froomlist.tree), room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
332 gnt_tree_add_row_after(GNT_TREE(froomlist.tree), room,
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
333 gnt_tree_create_row(GNT_TREE(froomlist.tree),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
334 purple_roomlist_room_get_name(room),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
335 purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY ? "<" : ""),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
336 purple_roomlist_room_get_parent(room), NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
337 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
338
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
339 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
340 fl_destroy(PurpleRoomlist *list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
341 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
342 if (!froomlist.window)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
343 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
344
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
345 if (froomlist.roomlist == list) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
346 froomlist.roomlist = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
347 gnt_tree_remove_all(GNT_TREE(froomlist.tree));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
348 gnt_widget_destroy(froomlist.tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
349 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
350 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
351
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
352 static PurpleRoomlistUiOps ui_ops =
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
353 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
354 fl_show_with_account, /* void (*show_with_account)(PurpleAccount *account); **< Force the ui to pop up a dialog and get the list */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
355 fl_create, /* void (*create)(PurpleRoomlist *list); **< A new list was created. */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
356 fl_set_fields, /* void (*set_fields)(PurpleRoomlist *list, GList *fields); **< Sets the columns. */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
357 fl_add_room, /* void (*add_room)(PurpleRoomlist *list, PurpleRoomlistRoom *room); **< Add a room to the list. */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
358 NULL, /* void (*in_progress)(PurpleRoomlist *list, gboolean flag); **< Are we fetching stuff still? */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
359 fl_destroy, /* void (*destroy)(PurpleRoomlist *list); **< We're destroying list. */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
360
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
361 NULL, /* void (*_purple_reserved1)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
362 NULL, /* void (*_purple_reserved2)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
363 NULL, /* void (*_purple_reserved3)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
364 NULL /* void (*_purple_reserved4)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
365 };
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
366 PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
367 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
368 return &ui_ops;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
369 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
370
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
371 void finch_roomlist_show_all(void)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
372 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
373 purple_roomlist_show_with_account(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
374 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
375