Mercurial > pidgin
annotate finch/gntroomlist.c @ 31934:5dafa68c8eb0
Some struct hiding. What a pain.
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 23 Aug 2011 05:43:51 +0000 |
parents | f7c5bb2f6623 |
children | ecfbb3ba0135 |
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" |
27587
f7c5bb2f6623
Don't include an internal header in the public finch headers.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
26199
diff
changeset
|
28 #include <internal.h> |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
29 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
30 #include "gntrequest.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
31 #include "gntroomlist.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
32 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
33 #include "gntbox.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
34 #include "gntbutton.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
35 #include "gntcombobox.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
36 #include "gnttextview.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
37 #include "gnttree.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
38 #include "gntwindow.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
39 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
40 #include "debug.h" |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
41 |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
42 #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
|
43 |
31934
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
44 #undef FINCH_GET_DATA |
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
45 #undef FINCH_SET_DATA |
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
46 #define FINCH_GET_DATA(obj) purple_roomlist_get_ui_data(obj) |
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
47 #define FINCH_SET_DATA(obj, data) purple_roomlist_set_ui_data(obj, data) |
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
48 |
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
49 |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
50 /* 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
|
51 struct _FinchRoomlist |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
52 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
53 GntWidget *window; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
54 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
55 GntWidget *accounts; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
56 GntWidget *tree; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
57 GntWidget *details; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
58 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
59 GntWidget *getlist; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
60 GntWidget *add; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
61 GntWidget *join; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
62 GntWidget *stop; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
63 GntWidget *close; |
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 PurpleAccount *account; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
66 PurpleRoomlist *roomlist; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
67 } froomlist; |
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 typedef struct _FinchRoomlist FinchRoomlist; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
70 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
71 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
72 unset_roomlist(gpointer null) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
73 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
74 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
|
75 if (froomlist.roomlist) { |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
76 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
|
77 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
|
78 } |
bfa85af677f2
Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22024
diff
changeset
|
79 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
|
80 froomlist.tree = NULL; |
22006
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 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
84 update_roomlist(PurpleRoomlist *list) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
85 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
86 if (froomlist.roomlist == list) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
87 return; |
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 if (froomlist.roomlist) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
90 purple_roomlist_unref(froomlist.roomlist); |
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 if ((froomlist.roomlist = list) != NULL) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
93 purple_roomlist_ref(list); |
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_stop(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 if (froomlist.roomlist && |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
99 purple_roomlist_get_in_progress(froomlist.roomlist)) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
100 purple_roomlist_cancel_get_list(froomlist.roomlist); |
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 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
103 static void fl_get_list(GntWidget *button, gpointer null) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
104 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
105 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
|
106 PurpleConnection *gc = purple_account_get_connection(account); |
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 if (!gc) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
109 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
110 |
22028
bfa85af677f2
Unset some stuff to make sure Sylar can't kill us.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22024
diff
changeset
|
111 update_roomlist(NULL); |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
112 froomlist.roomlist = purple_roomlist_get_list(gc); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
113 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
|
114 } |
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 static void fl_add_chat(GntWidget *button, gpointer null) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
117 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
118 char *name; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
119 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
|
120 PurpleConnection *gc = purple_account_get_connection(froomlist.account); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
121 PurplePluginProtocolInfo *prpl_info = NULL; |
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 if (gc == NULL || room == NULL) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
124 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
125 |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22085
diff
changeset
|
126 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
|
127 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
128 if(prpl_info != NULL && prpl_info->roomlist_room_serialize) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
129 name = prpl_info->roomlist_room_serialize(room); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
130 else |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
131 name = g_strdup(purple_roomlist_room_get_name(room)); |
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 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
|
134 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
135 g_free(name); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
136 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
137 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
138 static void fl_close(GntWidget *button, gpointer null) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
139 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
140 gnt_widget_destroy(froomlist.window); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
141 } |
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 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
144 roomlist_activated(GntWidget *widget) |
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 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
|
147 if (!room) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
148 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
149 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
150 switch (purple_roomlist_room_get_type(room)) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
151 case PURPLE_ROOMLIST_ROOMTYPE_ROOM: |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
152 purple_roomlist_room_join(froomlist.roomlist, room); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
153 break; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
154 case PURPLE_ROOMLIST_ROOMTYPE_CATEGORY: |
31934
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
155 if (!purple_roomlist_room_get_expanded_once(room)) { |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
156 purple_roomlist_expand_category(froomlist.roomlist, room); |
31934
5dafa68c8eb0
Some struct hiding. What a pain.
Mark Doliner <mark@kingant.net>
parents:
27587
diff
changeset
|
157 purple_roomlist_room_set_expanded_once(room, TRUE); |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
158 } |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
159 break; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
160 } |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
161 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
|
162 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
163 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
164 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
165 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
|
166 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
167 GList *iter, *field; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
168 PurpleRoomlistRoom *room = current; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
169 GntTextView *tv = GNT_TEXT_VIEW(froomlist.details); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
170 gboolean first = TRUE; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
171 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
172 gnt_text_view_clear(tv); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
173 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
174 if (!room) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
175 return; |
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 for (iter = purple_roomlist_room_get_fields(room), |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
178 field = purple_roomlist_get_fields(froomlist.roomlist); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
179 iter && field; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
180 iter = iter->next, field = field->next) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
181 PurpleRoomlistField *f = field->data; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
182 char *label = NULL; |
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 if (purple_roomlist_field_get_hidden(f)) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
185 continue; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
186 } |
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 if (!first) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
189 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
|
190 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
191 gnt_text_view_append_text_with_flags(tv, |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
192 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
|
193 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
|
194 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
195 switch (purple_roomlist_field_get_type(f)) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
196 case PURPLE_ROOMLIST_FIELD_BOOL: |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
197 label = g_strdup(iter->data ? "True" : "False"); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
198 break; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
199 case PURPLE_ROOMLIST_FIELD_INT: |
26199
b23211876f47
Fix Finch warnings when building on 64-bit
Paul Aurich <paul@darkrain42.org>
parents:
24597
diff
changeset
|
200 label = g_strdup_printf("%d", GPOINTER_TO_INT(iter->data)); |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
201 break; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
202 case PURPLE_ROOMLIST_FIELD_STRING: |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
203 label = g_strdup(iter->data); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
204 break; |
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 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
|
207 g_free(label); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
208 first = FALSE; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
209 } |
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 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
|
212 if (!first) |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
213 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
|
214 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
|
215 _("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
|
216 GNT_TEXT_FLAG_NORMAL); |
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 } |
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 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
221 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
|
222 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
223 if (froomlist.account == current) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
224 return; |
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 froomlist.account = current; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
228 if (froomlist.roomlist) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
229 if (purple_roomlist_get_in_progress(froomlist.roomlist)) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
230 purple_roomlist_cancel_get_list(froomlist.roomlist); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
231 update_roomlist(NULL); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
232 } |
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 gnt_tree_remove_all(GNT_TREE(froomlist.tree)); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
235 gnt_widget_draw(froomlist.tree); |
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 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
239 reset_account_list(PurpleAccount *account) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
240 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
241 GList *list; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
242 GntComboBox *accounts = GNT_COMBO_BOX(froomlist.accounts); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
243 gnt_combo_box_remove_all(accounts); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
244 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
|
245 PurplePluginProtocolInfo *prpl_info = NULL; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
246 PurpleConnection *gc = list->data; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
247 |
22214
2b426862ffbf
Add accessor and update finch to not touch the internals of PurpleConnection.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22085
diff
changeset
|
248 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(purple_connection_get_prpl(gc)); |
24597
c1f954e51389
Fix a crash that happens when accessing the roomlist for an account that's
Paul Aurich <paul@darkrain42.org>
parents:
22217
diff
changeset
|
249 if (PURPLE_CONNECTION_IS_CONNECTED(gc) && |
c1f954e51389
Fix a crash that happens when accessing the roomlist for an account that's
Paul Aurich <paul@darkrain42.org>
parents:
22217
diff
changeset
|
250 prpl_info->roomlist_get_list != NULL) { |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
251 PurpleAccount *account = purple_connection_get_account(gc); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
252 char *text = g_strdup_printf("%s (%s)", |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
253 purple_account_get_username(account), |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
254 purple_account_get_protocol_name(account)); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
255 gnt_combo_box_add_data(accounts, account, text); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
256 g_free(text); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
257 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
258 } |
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 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
261 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
|
262 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
|
263 { |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
264 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
|
265 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
|
266 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
|
267 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
|
268 } |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
269 |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
270 static void |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
271 setup_roomlist(PurpleAccount *account) |
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 GntWidget *window, *tree, *hbox, *accounts; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
274 int iter; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
275 struct { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
276 const char *label; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
277 GCallback callback; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
278 GntWidget **widget; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
279 } buttons[] = { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
280 {_("Stop"), G_CALLBACK(fl_stop), &froomlist.stop}, |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
281 {_("Get"), G_CALLBACK(fl_get_list), &froomlist.getlist}, |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
282 {_("Add"), G_CALLBACK(fl_add_chat), &froomlist.add}, |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
283 {_("Close"), G_CALLBACK(fl_close), &froomlist.close}, |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
284 {NULL, NULL, NULL} |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
285 }; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
286 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
287 if (froomlist.window) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
288 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
289 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
290 froomlist.window = window = gnt_window_new(); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
291 g_object_set(G_OBJECT(window), "vertical", TRUE, NULL); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
292 gnt_box_set_pad(GNT_BOX(window), 0); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
293 gnt_box_set_title(GNT_BOX(window), _("Room List")); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
294 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
|
295 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
296 froomlist.accounts = accounts = gnt_combo_box_new(); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
297 reset_account_list(account); |
22085
a2db27c84346
Fix CID #380 by using an assigned variable.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22028
diff
changeset
|
298 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
|
299 g_signal_connect(G_OBJECT(accounts), "selection-changed", |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
300 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
|
301 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
|
302 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
303 froomlist.tree = tree = gnt_tree_new_with_columns(2); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
304 gnt_tree_set_show_title(GNT_TREE(tree), TRUE); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
305 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
|
306 gnt_tree_set_column_titles(GNT_TREE(tree), _("Name"), ""); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
307 gnt_tree_set_show_separator(GNT_TREE(tree), FALSE); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
308 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
|
309 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
|
310 gnt_tree_set_search_column(GNT_TREE(tree), 0); |
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 gnt_box_add_widget(GNT_BOX(window), tree); |
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 froomlist.details = gnt_text_view_new(); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
315 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
|
316 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
|
317 gnt_widget_set_size(froomlist.details, -1, 8); |
22006
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 hbox = gnt_hbox_new(FALSE); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
320 gnt_box_add_widget(GNT_BOX(window), hbox); |
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 for (iter = 0; buttons[iter].label; iter++) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
323 GntWidget *button = gnt_button_new(buttons[iter].label); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
324 gnt_box_add_widget(GNT_BOX(hbox), button); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
325 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
|
326 *buttons[iter].widget = button; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
327 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
|
328 } |
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 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
|
331 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
332 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
|
333 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
334 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
335 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
336 fl_show_with_account(PurpleAccount *account) |
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 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
|
339 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
|
340 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
|
341 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
|
342 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
|
343 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
|
344 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
|
345 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
|
346 gnt_window_present(froomlist.window); |
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_create(PurpleRoomlist *list) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
351 { |
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
|
352 FINCH_SET_DATA(list, &froomlist); |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
353 setup_roomlist(NULL); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
354 update_roomlist(list); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
355 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
356 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
357 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
358 fl_set_fields(PurpleRoomlist *list, GList *fields) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
359 { |
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 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
362 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
363 fl_add_room(PurpleRoomlist *roomlist, PurpleRoomlistRoom *room) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
364 { |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
365 gboolean category; |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
366 if (froomlist.roomlist != roomlist) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
367 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
368 |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
369 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
|
370 gnt_tree_remove(GNT_TREE(froomlist.tree), room); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
371 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
|
372 gnt_tree_create_row(GNT_TREE(froomlist.tree), |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
373 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
|
374 category ? "<" : ""), |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
375 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
|
376 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
|
377 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
378 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
379 static void |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
380 fl_destroy(PurpleRoomlist *list) |
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 if (!froomlist.window) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
383 return; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
384 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
385 if (froomlist.roomlist == list) { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
386 froomlist.roomlist = NULL; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
387 gnt_tree_remove_all(GNT_TREE(froomlist.tree)); |
22023
d65fd48a3ad9
Typo can cause crashes.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22006
diff
changeset
|
388 gnt_widget_draw(froomlist.tree); |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
389 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
390 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
391 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
392 static PurpleRoomlistUiOps ui_ops = |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
393 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
394 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
|
395 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
|
396 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
|
397 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
|
398 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
|
399 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
|
400 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
401 NULL, /* void (*_purple_reserved1)(void); */ |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
402 NULL, /* void (*_purple_reserved2)(void); */ |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
403 NULL, /* void (*_purple_reserved3)(void); */ |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
404 NULL /* void (*_purple_reserved4)(void); */ |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
405 }; |
22024
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
406 |
22006
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
407 PurpleRoomlistUiOps *finch_roomlist_get_ui_ops(void) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
408 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
409 return &ui_ops; |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
410 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
411 |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
412 void finch_roomlist_show_all(void) |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
413 { |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
414 purple_roomlist_show_with_account(NULL); |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
415 } |
1278280fa0b6
Implementation of the roomlist API.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff
changeset
|
416 |
22024
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_init(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 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
|
420 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
|
421 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
|
422 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
|
423 } |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
424 |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
425 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
|
426 { |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
427 } |
57cac5dfda2a
Remember the size of the roomlist window. Handle the categories better.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
22023
diff
changeset
|
428 |