annotate finch/gntroomlist.c @ 24476:3d6fe79753c3

This should fix another crash I've seen. We weren't correctly cancelling the proxy connect when we destroyed the servconn because we were only calling msn_servconn_disconnect() if we had actually connected. So always call msn_servconn_disconnect() from msn_servconn_destroy() and let the disconnect function deal with only closing stuff that is actually open. Here's the backtrace: #0 0x0000000000000000 in ?? () #1 0x00000000005f95e0 in connect_cb (data=0x2ab92ef6e7b0, source=7, error_message=0x0) at servconn.c:185 #2 0x000000000056e7da in purple_proxy_connect_data_connected (connect_data=0x2ab92ef70260) at proxy.c:598 #3 0x000000000056e90d in socket_ready_cb (data=0x2ab92ef70260, source=7, cond=PURPLE_INPUT_WRITE) at proxy.c:657 #4 0x00000000004db70c in pidgin_io_invoke (source=0x2ab92ee4be50, condition=G_IO_OUT, data=0x2ab92dfd3130) at gtkeventloop.cc:79 In frame 1, servconn is not valid (it has already been freed)
author Mark Doliner <mark@kingant.net>
date Tue, 18 Nov 2008 07:32:23 +0000
parents ad357ca94de9
children c1f954e51389
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
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
27 #include "finch.h"
22006
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
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
41 #define PREF_ROOT "/finch/roomlist"
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
42
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
43 /* 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
44 struct _FinchRoomlist
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 *window;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
47
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
48 GntWidget *accounts;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
49 GntWidget *tree;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
50 GntWidget *details;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
51
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
52 GntWidget *getlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
53 GntWidget *add;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
54 GntWidget *join;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
55 GntWidget *stop;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
56 GntWidget *close;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
57
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
58 PurpleAccount *account;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
59 PurpleRoomlist *roomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
60 } froomlist;
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 typedef struct _FinchRoomlist FinchRoomlist;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
63
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
64 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
65 unset_roomlist(gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
66 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
67 froomlist.window = NULL;
22028
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
68 if (froomlist.roomlist) {
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
69 purple_roomlist_unref(froomlist.roomlist);
22028
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
70 froomlist.roomlist = NULL;
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
71 }
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
72 froomlist.account = NULL;
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
73 froomlist.tree = NULL;
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
74 }
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 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
77 update_roomlist(PurpleRoomlist *list)
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)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
80 return;
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 if (froomlist.roomlist)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
83 purple_roomlist_unref(froomlist.roomlist);
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 = list) != NULL)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
86 purple_roomlist_ref(list);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
87 }
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 static void fl_stop(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
90 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
91 if (froomlist.roomlist &&
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
92 purple_roomlist_get_in_progress(froomlist.roomlist))
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
93 purple_roomlist_cancel_get_list(froomlist.roomlist);
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
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
96 static void fl_get_list(GntWidget *button, gpointer null)
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 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
99 PurpleConnection *gc = purple_account_get_connection(account);
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 if (!gc)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
102 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
103
22028
bfa85af677f2 Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22024
diff changeset
104 update_roomlist(NULL);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
105 froomlist.roomlist = purple_roomlist_get_list(gc);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
106 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
107 }
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 static void fl_add_chat(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
110 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
111 char *name;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
112 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
113 PurpleConnection *gc = purple_account_get_connection(froomlist.account);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
114 PurplePluginProtocolInfo *prpl_info = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
115
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
116 if (gc == NULL || room == NULL)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
117 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
118
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22085
diff changeset
119 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
22006
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 if(prpl_info != NULL && prpl_info->roomlist_room_serialize)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
122 name = prpl_info->roomlist_room_serialize(room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
123 else
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
124 name = g_strdup(purple_roomlist_room_get_name(room));
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 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
127
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
128 g_free(name);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
129 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
130
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
131 static void fl_close(GntWidget *button, gpointer null)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
132 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
133 gnt_widget_destroy(froomlist.window);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
134 }
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 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
137 roomlist_activated(GntWidget *widget)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
138 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
139 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
140 if (!room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
141 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
142
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
143 switch (purple_roomlist_room_get_type(room)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
144 case PURPLE_ROOMLIST_ROOMTYPE_ROOM:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
145 purple_roomlist_room_join(froomlist.roomlist, room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
146 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
147 case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY:
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
148 if (!room->expanded_once) {
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
149 purple_roomlist_expand_category(froomlist.roomlist, room);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
150 room->expanded_once = TRUE;
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
151 }
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
152 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
153 }
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
154 gnt_tree_set_expanded(GNT_TREE(widget), room, TRUE);
22006
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
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
157 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
158 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
159 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
160 GList *iter, *field;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
161 PurpleRoomlistRoom *room = current;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
162 GntTextView *tv = GNT_TEXT_VIEW(froomlist.details);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
163 gboolean first = TRUE;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
164
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
165 gnt_text_view_clear(tv);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
166
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
167 if (!room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
168 return;
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 for (iter = purple_roomlist_room_get_fields(room),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
171 field = purple_roomlist_get_fields(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
172 iter && field;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
173 iter = iter->next, field = field->next) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
174 PurpleRoomlistField *f = field->data;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
175 char *label = NULL;
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 if (purple_roomlist_field_get_hidden(f)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
178 continue;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
179 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
180
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
181 if (!first)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
182 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
183
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
184 gnt_text_view_append_text_with_flags(tv,
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
185 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
186 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
187
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
188 switch (purple_roomlist_field_get_type(f)) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
189 case PURPLE_ROOMLIST_FIELD_BOOL:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
190 label = g_strdup(iter->data ? "True" : "False");
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
191 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
192 case PURPLE_ROOMLIST_FIELD_INT:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
193 label = g_strdup_printf("%d", (int)iter->data);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
194 break;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
195 case PURPLE_ROOMLIST_FIELD_STRING:
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
196 label = g_strdup(iter->data);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
197 break;
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 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
200 g_free(label);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
201 first = FALSE;
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
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
204 if (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY) {
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
205 if (!first)
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
206 gnt_text_view_append_text_with_flags(tv, "\n", GNT_TEXT_FLAG_NORMAL);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
207 gnt_text_view_append_text_with_flags(tv,
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
208 _("Hit 'Enter' to find more rooms of this category."),
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
209 GNT_TEXT_FLAG_NORMAL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
210 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
211 }
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 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
214 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
215 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
216 if (froomlist.account == current) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
217 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
218 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
219
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
220 froomlist.account = current;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
221 if (froomlist.roomlist) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
222 if (purple_roomlist_get_in_progress(froomlist.roomlist))
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
223 purple_roomlist_cancel_get_list(froomlist.roomlist);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
224 update_roomlist(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
225 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
226
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
227 gnt_tree_remove_all(GNT_TREE(froomlist.tree));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
228 gnt_widget_draw(froomlist.tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
229 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
230
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
231 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
232 reset_account_list(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
233 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
234 GList *list;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
235 GntComboBox *accounts = GNT_COMBO_BOX(froomlist.accounts);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
236 gnt_combo_box_remove_all(accounts);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
237 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
238 PurplePluginProtocolInfo *prpl_info = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
239 PurpleConnection *gc = list->data;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
240
22214
2b426862ffbf Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22085
diff changeset
241 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc));
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
242 if (prpl_info->roomlist_get_list != NULL) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
243 PurpleAccount *account = purple_connection_get_account(gc);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
244 char *text = g_strdup_printf("%s (%s)",
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
245 purple_account_get_username(account),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
246 purple_account_get_protocol_name(account));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
247 gnt_combo_box_add_data(accounts, account, text);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
248 g_free(text);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
249 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
250 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
251 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
252
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
253 static void
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
254 size_changed_cb(GntWidget *widget, int oldw, int oldh)
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
255 {
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
256 int w, h;
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
257 gnt_widget_get_size(widget, &w, &h);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
258 purple_prefs_set_int(PREF_ROOT "/size/width", w);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
259 purple_prefs_set_int(PREF_ROOT "/size/height", h);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
260 }
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
261
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
262 static void
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
263 setup_roomlist(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
264 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
265 GntWidget *window, *tree, *hbox, *accounts;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
266 int iter;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
267 struct {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
268 const char *label;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
269 GCallback callback;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
270 GntWidget **widget;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
271 } buttons[] = {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
272 {_("Stop"), G_CALLBACK(fl_stop), &froomlist.stop},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
273 {_("Get"), G_CALLBACK(fl_get_list), &froomlist.getlist},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
274 {_("Add"), G_CALLBACK(fl_add_chat), &froomlist.add},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
275 {_("Close"), G_CALLBACK(fl_close), &froomlist.close},
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
276 {NULL, NULL, NULL}
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
277 };
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
278
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
279 if (froomlist.window)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
280 return;
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 froomlist.window = window = gnt_window_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
283 g_object_set(G_OBJECT(window), "vertical", TRUE, NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
284 gnt_box_set_pad(GNT_BOX(window), 0);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
285 gnt_box_set_title(GNT_BOX(window), _("Room List"));
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
286 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
287
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
288 froomlist.accounts = accounts = gnt_combo_box_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
289 reset_account_list(account);
22085
a2db27c84346 Fix CID #380 by using an assigned variable.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22028
diff changeset
290 gnt_box_add_widget(GNT_BOX(window), accounts);
a2db27c84346 Fix CID #380 by using an assigned variable.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22028
diff changeset
291 g_signal_connect(G_OBJECT(accounts), "selection-changed",
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
292 G_CALLBACK(roomlist_account_changed), NULL);
22085
a2db27c84346 Fix CID #380 by using an assigned variable.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22028
diff changeset
293 froomlist.account = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(accounts));
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
294
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
295 froomlist.tree = tree = gnt_tree_new_with_columns(2);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
296 gnt_tree_set_show_title(GNT_TREE(tree), TRUE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
297 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
298 gnt_tree_set_column_titles(GNT_TREE(tree), _("Name"), "");
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
299 gnt_tree_set_show_separator(GNT_TREE(tree), FALSE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
300 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
301 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
302 gnt_tree_set_search_column(GNT_TREE(tree), 0);
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 gnt_box_add_widget(GNT_BOX(window), tree);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
305
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
306 froomlist.details = gnt_text_view_new();
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
307 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
308 gnt_box_add_widget(GNT_BOX(window), froomlist.details);
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
309 gnt_widget_set_size(froomlist.details, -1, 8);
22006
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 hbox = gnt_hbox_new(FALSE);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
312 gnt_box_add_widget(GNT_BOX(window), hbox);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
313
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
314 for (iter = 0; buttons[iter].label; iter++) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
315 GntWidget *button = gnt_button_new(buttons[iter].label);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
316 gnt_box_add_widget(GNT_BOX(hbox), button);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
317 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
318 *buttons[iter].widget = button;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
319 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
320 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
321
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
322 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
323
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
324 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
325 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
326
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
327 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
328 fl_show_with_account(PurpleAccount *account)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
329 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
330 setup_roomlist(account);
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
331 g_signal_handlers_disconnect_matched(G_OBJECT(froomlist.window), G_SIGNAL_MATCH_FUNC,
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
332 0, 0, NULL, G_CALLBACK(size_changed_cb), NULL);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
333 gnt_widget_show(froomlist.window);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
334 gnt_screen_resize_widget(froomlist.window,
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
335 purple_prefs_get_int(PREF_ROOT "/size/width"),
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
336 purple_prefs_get_int(PREF_ROOT "/size/height"));
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
337 g_signal_connect(G_OBJECT(froomlist.window), "size_changed", G_CALLBACK(size_changed_cb), NULL);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
338 gnt_window_present(froomlist.window);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
339 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
340
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
341 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
342 fl_create(PurpleRoomlist *list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
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 FINCH_SET_DATA(list, &froomlist);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
345 setup_roomlist(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
346 update_roomlist(list);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
347 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
348
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
349 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
350 fl_set_fields(PurpleRoomlist *list, GList *fields)
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 }
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 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
355 fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
356 {
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
357 gboolean category;
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
358 if (froomlist.roomlist != roomlist)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
359 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
360
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
361 category = (purple_roomlist_room_get_type(room) == PURPLE_ROOMLIST_ROOMTYPE_CATEGORY);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
362 gnt_tree_remove(GNT_TREE(froomlist.tree), room);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
363 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
364 gnt_tree_create_row(GNT_TREE(froomlist.tree),
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
365 purple_roomlist_room_get_name(room),
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
366 category ? "<" : ""),
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
367 purple_roomlist_room_get_parent(room), NULL);
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
368 gnt_tree_set_expanded(GNT_TREE(froomlist.tree), room, !category);
22006
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 static void
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
372 fl_destroy(PurpleRoomlist *list)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
373 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
374 if (!froomlist.window)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
375 return;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
376
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
377 if (froomlist.roomlist == list) {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
378 froomlist.roomlist = NULL;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
379 gnt_tree_remove_all(GNT_TREE(froomlist.tree));
22023
d65fd48a3ad9 Typo can cause crashes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22006
diff changeset
380 gnt_widget_draw(froomlist.tree);
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
381 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
382 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
383
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
384 static PurpleRoomlistUiOps ui_ops =
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
385 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
386 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
387 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
388 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
389 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
390 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
391 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
392
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
393 NULL, /* void (*_purple_reserved1)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
394 NULL, /* void (*_purple_reserved2)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
395 NULL, /* void (*_purple_reserved3)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
396 NULL /* void (*_purple_reserved4)(void); */
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
397 };
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
398
22006
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
399 PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
400 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
401 return &ui_ops;
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
402 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
403
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
404 void finch_roomlist_show_all(void)
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
405 {
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
406 purple_roomlist_show_with_account(NULL);
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
407 }
1278280fa0b6 Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
408
22024
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
409 void finch_roomlist_init(void)
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
410 {
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
411 purple_prefs_add_none(PREF_ROOT);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
412 purple_prefs_add_none(PREF_ROOT "/size");
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
413 purple_prefs_add_int(PREF_ROOT "/size/width", 60);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
414 purple_prefs_add_int(PREF_ROOT "/size/height", 15);
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
415 }
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
416
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
417 void finch_roomlist_uninit(void)
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
418 {
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
419 }
57cac5dfda2a Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 22023
diff changeset
420