Mercurial > pidgin.yaz
annotate finch/gntconv.c @ 17593:759cd72bd2ff
Replaced a clean and simple API with a very weird hack due to vivid request on #pidgin by multiple devs. This avoids the change in PurplePluginProtocolInfo, but requires complicated change tracking in every prpl. The others prpl should add this change tracking, too (since otherwise the status gets changed even though nothing they care about changed), but that's not up to me.
author | Andreas Monitzer <pidgin@monitzer.com> |
---|---|
date | Mon, 18 Jun 2007 12:37:29 +0000 |
parents | 46f2f86e08e4 |
children | 319bcb73eb4e |
rev | line source |
---|---|
15818 | 1 /** |
2 * @file gntconv.c GNT Conversation API | |
16194
0f0832c13fcb
Rename the Doxygen group from gntui to finch and define the finch group
Richard Laager <rlaager@wiktel.com>
parents:
16128
diff
changeset
|
3 * @ingroup finch |
15818 | 4 * |
15871
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15823
diff
changeset
|
5 * finch |
15818 | 6 * |
15871
66dff3dfdea6
Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@wiktel.com>
parents:
15823
diff
changeset
|
7 * Finch is the legal property of its developers, whose names are too numerous |
15818 | 8 * to list here. Please refer to the COPYRIGHT file distributed with this |
9 * source distribution. | |
10 * | |
11 * This program is free software; you can redistribute it and/or modify | |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
24 */ | |
25 #include <string.h> | |
26 | |
27 #include <cmds.h> | |
28 #include <idle.h> | |
29 #include <prefs.h> | |
30 #include <util.h> | |
31 | |
15823 | 32 #include "finch.h" |
15818 | 33 #include "gntaccount.h" |
34 #include "gntblist.h" | |
35 #include "gntconv.h" | |
36 #include "gntdebug.h" | |
37 #include "gntplugin.h" | |
38 #include "gntprefs.h" | |
39 #include "gntstatus.h" | |
16903 | 40 #include "gntpounce.h" |
15818 | 41 |
42 #include "gnt.h" | |
43 #include "gntbox.h" | |
44 #include "gntentry.h" | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
45 #include "gntlabel.h" |
16903 | 46 #include "gntmenu.h" |
47 #include "gntmenuitem.h" | |
48 #include "gntmenuitemcheck.h" | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
49 #include "gnttextview.h" |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
50 #include "gnttree.h" |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
51 #include "gntutils.h" |
16903 | 52 #include "gntwindow.h" |
15818 | 53 |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
54 #define PREF_ROOT "/finch/conversations" |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
55 #define PREF_CHAT PREF_ROOT "/chats" |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
56 #define PREF_USERLIST PREF_CHAT "/userlist" |
15818 | 57 |
58 #include "config.h" | |
59 | |
17032
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
60 static void finch_write_common(PurpleConversation *conv, const char *who, |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
61 const char *message, PurpleMessageFlags flags, time_t mtime); |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
62 |
15818 | 63 static void |
64 send_typing_notification(GntWidget *w, FinchConv *ggconv) | |
65 { | |
66 const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry)); | |
67 gboolean empty = (!text || !*text); | |
16427
4999bbc52881
Works for me! Renames prefs: /core to /purple, /gaim/gtk to /pidgin, /gaim/gnt to /finch
Sean Egan <seanegan@gmail.com>
parents:
16194
diff
changeset
|
68 if (purple_prefs_get_bool("/finch/conversations/notify_typing")) { |
15823 | 69 PurpleConversation *conv = ggconv->active_conv; |
70 PurpleConvIm *im = PURPLE_CONV_IM(conv); | |
15818 | 71 if (!empty) { |
15823 | 72 gboolean send = (purple_conv_im_get_send_typed_timeout(im) == 0); |
15818 | 73 |
15823 | 74 purple_conv_im_stop_send_typed_timeout(im); |
75 purple_conv_im_start_send_typed_timeout(im); | |
76 if (send || (purple_conv_im_get_type_again(im) != 0 && | |
77 time(NULL) > purple_conv_im_get_type_again(im))) { | |
15818 | 78 unsigned int timeout; |
15823 | 79 timeout = serv_send_typing(purple_conversation_get_gc(conv), |
80 purple_conversation_get_name(conv), | |
81 PURPLE_TYPING); | |
82 purple_conv_im_set_type_again(im, timeout); | |
15818 | 83 } |
84 } else { | |
15823 | 85 purple_conv_im_stop_send_typed_timeout(im); |
15818 | 86 |
15823 | 87 serv_send_typing(purple_conversation_get_gc(conv), |
88 purple_conversation_get_name(conv), | |
89 PURPLE_NOT_TYPING); | |
15818 | 90 } |
91 } | |
92 } | |
93 | |
94 static gboolean | |
95 entry_key_pressed(GntWidget *w, const char *key, FinchConv *ggconv) | |
96 { | |
97 if (key[0] == '\r' && key[1] == 0) | |
98 { | |
99 const char *text = gnt_entry_get_text(GNT_ENTRY(ggconv->entry)); | |
100 if (*text == '/') | |
101 { | |
15823 | 102 PurpleConversation *conv = ggconv->active_conv; |
103 PurpleCmdStatus status; | |
15818 | 104 const char *cmdline = text + 1; |
105 char *error = NULL, *escape; | |
106 | |
107 escape = g_markup_escape_text(cmdline, -1); | |
15823 | 108 status = purple_cmd_do_command(conv, cmdline, escape, &error); |
15818 | 109 g_free(escape); |
110 | |
111 switch (status) | |
112 { | |
15823 | 113 case PURPLE_CMD_STATUS_OK: |
15818 | 114 break; |
15823 | 115 case PURPLE_CMD_STATUS_NOT_FOUND: |
116 purple_conversation_write(conv, "", _("No such command."), | |
117 PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
15818 | 118 break; |
15823 | 119 case PURPLE_CMD_STATUS_WRONG_ARGS: |
120 purple_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " | |
15818 | 121 "to that command."), |
15823 | 122 PURPLE_MESSAGE_NO_LOG, time(NULL)); |
15818 | 123 break; |
15823 | 124 case PURPLE_CMD_STATUS_FAILED: |
125 purple_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), | |
126 PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
15818 | 127 break; |
15823 | 128 case PURPLE_CMD_STATUS_WRONG_TYPE: |
129 if(purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) | |
130 purple_conversation_write(conv, "", _("That command only works in chats, not IMs."), | |
131 PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
15818 | 132 else |
15823 | 133 purple_conversation_write(conv, "", _("That command only works in IMs, not chats."), |
134 PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
15818 | 135 break; |
15823 | 136 case PURPLE_CMD_STATUS_WRONG_PRPL: |
137 purple_conversation_write(conv, "", _("That command doesn't work on this protocol."), | |
138 PURPLE_MESSAGE_NO_LOG, time(NULL)); | |
15818 | 139 break; |
140 } | |
141 g_free(error); | |
142 #if 0 | |
143 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), | |
144 _("Commands are not supported yet. Message was NOT sent."), | |
145 GNT_TEXT_FLAG_DIM | GNT_TEXT_FLAG_UNDERLINE); | |
146 gnt_text_view_next_line(GNT_TEXT_VIEW(ggconv->tv)); | |
147 gnt_text_view_scroll(GNT_TEXT_VIEW(ggconv->tv), 0); | |
148 #endif | |
149 } | |
150 else | |
151 { | |
152 char *escape = g_markup_escape_text(text, -1); | |
15823 | 153 char *apos = purple_strreplace(escape, "'", "'"); |
15818 | 154 g_free(escape); |
155 escape = apos; | |
15823 | 156 switch (purple_conversation_get_type(ggconv->active_conv)) |
15818 | 157 { |
15823 | 158 case PURPLE_CONV_TYPE_IM: |
159 purple_conv_im_send_with_flags(PURPLE_CONV_IM(ggconv->active_conv), escape, PURPLE_MESSAGE_SEND); | |
15818 | 160 break; |
15823 | 161 case PURPLE_CONV_TYPE_CHAT: |
162 purple_conv_chat_send(PURPLE_CONV_CHAT(ggconv->active_conv), escape); | |
15818 | 163 break; |
164 default: | |
165 g_free(escape); | |
166 g_return_val_if_reached(FALSE); | |
167 } | |
168 g_free(escape); | |
15823 | 169 purple_idle_touch(); |
15818 | 170 } |
171 gnt_entry_add_to_history(GNT_ENTRY(ggconv->entry), text); | |
172 gnt_entry_clear(GNT_ENTRY(ggconv->entry)); | |
173 return TRUE; | |
174 } | |
175 | |
176 return FALSE; | |
177 } | |
178 | |
179 static void | |
180 closing_window(GntWidget *window, FinchConv *ggconv) | |
181 { | |
182 GList *list = ggconv->list; | |
183 ggconv->window = NULL; | |
184 while (list) { | |
15823 | 185 PurpleConversation *conv = list->data; |
15818 | 186 list = list->next; |
15823 | 187 purple_conversation_destroy(conv); |
15818 | 188 } |
189 } | |
190 | |
191 static void | |
192 size_changed_cb(GntWidget *widget, int width, int height) | |
193 { | |
194 int w, h; | |
195 gnt_widget_get_size(widget, &w, &h); | |
15823 | 196 purple_prefs_set_int(PREF_ROOT "/size/width", w); |
197 purple_prefs_set_int(PREF_ROOT "/size/height", h); | |
15818 | 198 } |
199 | |
200 static void | |
201 save_position_cb(GntWidget *w, int x, int y) | |
202 { | |
15823 | 203 purple_prefs_set_int(PREF_ROOT "/position/x", x); |
204 purple_prefs_set_int(PREF_ROOT "/position/y", y); | |
15818 | 205 } |
206 | |
15823 | 207 static PurpleConversation * |
208 find_conv_with_contact(PurpleConversation *conv) | |
15818 | 209 { |
15823 | 210 PurpleBlistNode *node; |
211 PurpleBuddy *buddy = purple_find_buddy(conv->account, conv->name); | |
212 PurpleConversation *ret = NULL; | |
15818 | 213 |
214 if (!buddy) | |
215 return NULL; | |
216 | |
15823 | 217 for (node = ((PurpleBlistNode*)buddy)->parent->child; node; node = node->next) { |
218 if (node == (PurpleBlistNode*)buddy) | |
15818 | 219 continue; |
15823 | 220 if ((ret = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, |
221 ((PurpleBuddy*)node)->name, ((PurpleBuddy*)node)->account)) != NULL) | |
15818 | 222 break; |
223 } | |
224 return ret; | |
225 } | |
226 | |
227 static char * | |
15823 | 228 get_conversation_title(PurpleConversation *conv, PurpleAccount *account) |
15818 | 229 { |
15823 | 230 return g_strdup_printf(_("%s (%s -- %s)"), purple_conversation_get_title(conv), |
231 purple_account_get_username(account), purple_account_get_protocol_name(account)); | |
15818 | 232 } |
233 | |
234 static void | |
15823 | 235 update_buddy_typing(PurpleAccount *account, const char *who, gpointer null) |
15818 | 236 { |
15823 | 237 PurpleConversation *conv; |
15818 | 238 FinchConv *ggc; |
15823 | 239 PurpleConvIm *im = NULL; |
15818 | 240 char *title, *str; |
241 | |
15823 | 242 conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, account); |
15818 | 243 |
244 if (!conv) | |
245 return; | |
246 | |
15823 | 247 im = PURPLE_CONV_IM(conv); |
15818 | 248 ggc = conv->ui_data; |
249 | |
15823 | 250 if (purple_conv_im_get_typing_state(im) == PURPLE_TYPING) { |
15818 | 251 int scroll; |
252 str = get_conversation_title(conv, account); | |
253 title = g_strdup_printf(_("%s [%s]"), str, | |
254 gnt_ascii_only() ? "T" : "\342\243\277"); | |
255 g_free(str); | |
256 | |
257 scroll = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(ggc->tv)); | |
15823 | 258 str = g_strdup_printf(_("\n%s is typing..."), purple_conversation_get_name(conv)); |
15818 | 259 /* Updating is a little buggy. So just remove and add a new one */ |
260 gnt_text_view_tag_change(GNT_TEXT_VIEW(ggc->tv), "typing", NULL, TRUE); | |
261 gnt_text_view_append_text_with_tag(GNT_TEXT_VIEW(ggc->tv), | |
262 str, GNT_TEXT_FLAG_DIM, "typing"); | |
263 g_free(str); | |
264 if (scroll <= 1) | |
265 gnt_text_view_scroll(GNT_TEXT_VIEW(ggc->tv), 0); | |
266 } else { | |
267 title = get_conversation_title(conv, account); | |
268 gnt_text_view_tag_change(GNT_TEXT_VIEW(ggc->tv), "typing", NULL, TRUE); | |
269 } | |
270 gnt_screen_rename_widget(ggc->window, title); | |
271 g_free(title); | |
272 } | |
273 | |
17032
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
274 static void |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
275 chat_left_cb(PurpleConversation *conv, gpointer null) |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
276 { |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
277 finch_write_common(conv, NULL, _("You have left this chat."), |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
278 PURPLE_MESSAGE_SYSTEM, time(NULL)); |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
279 } |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
280 |
15818 | 281 static gpointer |
282 finch_conv_get_handle() | |
283 { | |
284 static int handle; | |
285 return &handle; | |
286 } | |
287 | |
288 static void | |
16903 | 289 clear_scrollback_cb(GntMenuItem *item, gpointer ggconv) |
290 { | |
291 FinchConv *ggc = ggconv; | |
292 gnt_text_view_clear(GNT_TEXT_VIEW(ggc->tv)); | |
293 } | |
294 | |
295 static void | |
296 send_file_cb(GntMenuItem *item, gpointer ggconv) | |
297 { | |
298 FinchConv *ggc = ggconv; | |
299 serv_send_file(purple_conversation_get_gc(ggc->active_conv), | |
300 purple_conversation_get_name(ggc->active_conv), NULL); | |
301 } | |
302 | |
303 static void | |
304 add_pounce_cb(GntMenuItem *item, gpointer ggconv) | |
305 { | |
306 FinchConv *ggc = ggconv; | |
307 finch_pounce_editor_show( | |
308 purple_conversation_get_account(ggc->active_conv), | |
309 purple_conversation_get_name(ggc->active_conv), NULL); | |
310 } | |
311 | |
312 static void | |
313 get_info_cb(GntMenuItem *item, gpointer ggconv) | |
314 { | |
315 FinchConv *ggc = ggconv; | |
16989
d637851abeb8
Make get-info behave the same way from both the conversation window menu and the buddylist context menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16969
diff
changeset
|
316 PurpleNotifyUserInfo *info = purple_notify_user_info_new(); |
d637851abeb8
Make get-info behave the same way from both the conversation window menu and the buddylist context menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16969
diff
changeset
|
317 purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving...")); |
d637851abeb8
Make get-info behave the same way from both the conversation window menu and the buddylist context menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16969
diff
changeset
|
318 purple_notify_userinfo(ggc->active_conv->account->gc, purple_conversation_get_name(ggc->active_conv), info, NULL, NULL); |
d637851abeb8
Make get-info behave the same way from both the conversation window menu and the buddylist context menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16969
diff
changeset
|
319 purple_notify_user_info_destroy(info); |
d637851abeb8
Make get-info behave the same way from both the conversation window menu and the buddylist context menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16969
diff
changeset
|
320 |
16903 | 321 serv_get_info(purple_conversation_get_gc(ggc->active_conv), |
322 purple_conversation_get_name(ggc->active_conv)); | |
323 } | |
324 | |
325 static void | |
326 toggle_timestamps_cb(GntMenuItem *item, gpointer ggconv) | |
327 { | |
328 purple_prefs_set_bool(PREF_ROOT "/timestamps", | |
329 !purple_prefs_get_bool(PREF_ROOT "/timestamps")); | |
330 } | |
331 | |
332 static void | |
333 send_to_cb(GntMenuItem *m, gpointer n) | |
334 { | |
335 PurpleAccount *account = g_object_get_data(G_OBJECT(m), "purple_account"); | |
336 gchar *buddy = g_object_get_data(G_OBJECT(m), "purple_buddy_name"); | |
337 PurpleConversation *conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, buddy); | |
338 finch_conversation_set_active(conv); | |
339 } | |
340 | |
341 static void | |
342 generate_send_to_menu(FinchConv *ggc) | |
343 { | |
344 GntWidget *sub, *menu = ggc->menu; | |
345 GntMenuItem *item; | |
346 GSList *buds; | |
347 GList *list = NULL; | |
348 | |
349 buds = purple_find_buddies(ggc->active_conv->account, ggc->active_conv->name); | |
350 if (!buds) | |
351 return; | |
352 | |
353 item = gnt_menuitem_new(_("Send To")); | |
354 gnt_menu_add_item(GNT_MENU(menu), item); | |
355 sub = gnt_menu_new(GNT_MENU_POPUP); | |
356 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); | |
357 | |
358 for (; buds; buds = buds->next) { | |
359 PurpleBlistNode *node = (PurpleBlistNode *)purple_buddy_get_contact((PurpleBuddy *)buds->data); | |
360 for (node = node->child; node != NULL; node = node->next) { | |
361 PurpleBuddy *buddy = (PurpleBuddy *)node; | |
362 PurpleAccount *account = purple_buddy_get_account(buddy); | |
363 if (purple_account_is_connected(account)) { | |
364 /* Use the PurplePresence to get unique buddies. */ | |
365 PurplePresence *presence = purple_buddy_get_presence(buddy); | |
366 if (!g_list_find(list, presence)) | |
367 list = g_list_prepend(list, presence); | |
368 } | |
369 } | |
370 } | |
371 for (list = g_list_last(list); list != NULL; list = list->prev) { | |
372 PurplePresence *pre = list->data; | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
373 PurpleBuddy *buddy = purple_presence_get_buddy(pre); |
16903 | 374 PurpleAccount *account = purple_buddy_get_account(buddy); |
375 gchar *name = g_strdup(purple_buddy_get_name(buddy)); | |
376 gchar *text = g_strdup_printf("%s (%s)", purple_buddy_get_name(buddy), purple_account_get_username(account)); | |
377 item = gnt_menuitem_new(text); | |
378 g_free(text); | |
379 gnt_menu_add_item(GNT_MENU(sub), item); | |
380 gnt_menuitem_set_callback(item, send_to_cb, NULL); | |
381 g_object_set_data(G_OBJECT(item), "purple_account", account); | |
382 g_object_set_data_full(G_OBJECT(item), "purple_buddy_name", name, g_free); | |
383 } | |
384 g_list_free(list); | |
385 g_slist_free(buds); | |
386 } | |
387 | |
388 static void | |
389 gg_create_menu(FinchConv *ggc) | |
390 { | |
391 GntWidget *menu, *sub; | |
392 GntMenuItem *item; | |
393 | |
394 ggc->menu = menu = gnt_menu_new(GNT_MENU_TOPLEVEL); | |
395 gnt_window_set_menu(GNT_WINDOW(ggc->window), GNT_MENU(menu)); | |
396 | |
397 item = gnt_menuitem_new(_("Conversation")); | |
398 gnt_menu_add_item(GNT_MENU(menu), item); | |
399 | |
400 sub = gnt_menu_new(GNT_MENU_POPUP); | |
401 gnt_menuitem_set_submenu(item, GNT_MENU(sub)); | |
402 | |
403 item = gnt_menuitem_new(_("Clear Scrollback")); | |
404 gnt_menu_add_item(GNT_MENU(sub), item); | |
405 gnt_menuitem_set_callback(item, clear_scrollback_cb, ggc); | |
406 | |
407 item = gnt_menuitem_check_new(_("Show Timestamps")); | |
408 gnt_menuitem_check_set_checked(GNT_MENU_ITEM_CHECK(item), | |
409 purple_prefs_get_bool(PREF_ROOT "/timestamps")); | |
410 gnt_menu_add_item(GNT_MENU(sub), item); | |
411 gnt_menuitem_set_callback(item, toggle_timestamps_cb, ggc); | |
412 | |
413 if (purple_conversation_get_type(ggc->active_conv) == PURPLE_CONV_TYPE_IM) { | |
16969
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
414 PurpleAccount *account = purple_conversation_get_account(ggc->active_conv); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
415 PurplePluginProtocolInfo *pinfo = account->gc ? PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl) : NULL; |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
416 |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
417 if (pinfo && pinfo->get_info) { |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
418 item = gnt_menuitem_new(_("Get Info")); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
419 gnt_menu_add_item(GNT_MENU(sub), item); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
420 gnt_menuitem_set_callback(item, get_info_cb, ggc); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
421 } |
16903 | 422 |
423 item = gnt_menuitem_new(_("Add Buddy Pounce...")); | |
424 gnt_menu_add_item(GNT_MENU(sub), item); | |
425 gnt_menuitem_set_callback(item, add_pounce_cb, ggc); | |
426 | |
16969
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
427 if (pinfo && pinfo->send_file && |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
428 (!pinfo->can_receive_file || |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
429 pinfo->can_receive_file(account->gc, purple_conversation_get_name(ggc->active_conv)))) { |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
430 item = gnt_menuitem_new(_("Send File")); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
431 gnt_menu_add_item(GNT_MENU(sub), item); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
432 gnt_menuitem_set_callback(item, send_file_cb, ggc); |
1a336cfc410e
Change a string, and make sure non-functional items are not added in the conversation window menu.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16941
diff
changeset
|
433 } |
16903 | 434 |
435 generate_send_to_menu(ggc); | |
436 } | |
437 } | |
438 | |
439 static void | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
440 create_conv_from_userlist(GntWidget *widget, FinchConv *fc) |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
441 { |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
442 PurpleAccount *account = purple_conversation_get_account(fc->active_conv); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
443 char *name = gnt_tree_get_selection_data(GNT_TREE(widget)); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
444 purple_conversation_new(PURPLE_CONV_TYPE_IM, account, name); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
445 } |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
446 |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
447 static void |
15823 | 448 finch_create_conversation(PurpleConversation *conv) |
15818 | 449 { |
450 FinchConv *ggc = conv->ui_data; | |
451 char *title; | |
15823 | 452 PurpleConversationType type; |
453 PurpleConversation *cc; | |
454 PurpleAccount *account; | |
15818 | 455 |
456 if (ggc) | |
457 return; | |
458 | |
459 cc = find_conv_with_contact(conv); | |
460 if (cc && cc->ui_data) | |
461 ggc = cc->ui_data; | |
462 else | |
463 ggc = g_new0(FinchConv, 1); | |
464 | |
465 ggc->list = g_list_prepend(ggc->list, conv); | |
466 ggc->active_conv = conv; | |
467 conv->ui_data = ggc; | |
468 | |
469 if (cc && cc->ui_data) { | |
470 finch_conversation_set_active(conv); | |
471 return; | |
472 } | |
473 | |
15823 | 474 account = purple_conversation_get_account(conv); |
475 type = purple_conversation_get_type(conv); | |
15818 | 476 title = get_conversation_title(conv, account); |
477 | |
16903 | 478 ggc->window = gnt_vwindow_new(FALSE); |
15818 | 479 gnt_box_set_title(GNT_BOX(ggc->window), title); |
480 gnt_box_set_toplevel(GNT_BOX(ggc->window), TRUE); | |
481 gnt_box_set_pad(GNT_BOX(ggc->window), 0); | |
482 gnt_widget_set_name(ggc->window, "conversation-window"); | |
483 | |
16903 | 484 gg_create_menu(ggc); |
485 | |
15818 | 486 ggc->tv = gnt_text_view_new(); |
487 gnt_widget_set_name(ggc->tv, "conversation-window-textview"); | |
15823 | 488 gnt_widget_set_size(ggc->tv, purple_prefs_get_int(PREF_ROOT "/size/width"), |
489 purple_prefs_get_int(PREF_ROOT "/size/height")); | |
15818 | 490 |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
491 if (type == PURPLE_CONV_TYPE_CHAT) { |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
492 GntWidget *hbox, *tree; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
493 FinchConvChat *fc = ggc->u.chat = g_new0(FinchConvChat, 1); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
494 hbox = gnt_hbox_new(FALSE); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
495 gnt_box_set_pad(GNT_BOX(hbox), 0); |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
496 tree = fc->userlist = gnt_tree_new_with_columns(2); |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
497 gnt_tree_set_col_width(GNT_TREE(tree), 0, 1); /* The flag column */ |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
498 gnt_tree_set_compare_func(GNT_TREE(tree), (GCompareFunc)g_utf8_collate); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
499 gnt_tree_set_hash_fns(GNT_TREE(tree), g_str_hash, g_str_equal, g_free); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
500 GNT_WIDGET_SET_FLAGS(tree, GNT_WIDGET_NO_BORDER); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
501 gnt_box_add_widget(GNT_BOX(hbox), ggc->tv); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
502 gnt_box_add_widget(GNT_BOX(hbox), tree); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
503 gnt_box_add_widget(GNT_BOX(ggc->window), hbox); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
504 g_signal_connect(G_OBJECT(tree), "activate", G_CALLBACK(create_conv_from_userlist), ggc); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
505 gnt_widget_set_visible(tree, purple_prefs_get_bool(PREF_USERLIST)); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
506 } else { |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
507 gnt_box_add_widget(GNT_BOX(ggc->window), ggc->tv); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
508 } |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
509 |
16128
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
510 ggc->info = gnt_vbox_new(FALSE); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
511 gnt_box_add_widget(GNT_BOX(ggc->window), ggc->info); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
512 |
15818 | 513 ggc->entry = gnt_entry_new(NULL); |
514 gnt_box_add_widget(GNT_BOX(ggc->window), ggc->entry); | |
515 gnt_widget_set_name(ggc->entry, "conversation-window-entry"); | |
516 gnt_entry_set_history_length(GNT_ENTRY(ggc->entry), -1); | |
517 gnt_entry_set_word_suggest(GNT_ENTRY(ggc->entry), TRUE); | |
518 gnt_entry_set_always_suggest(GNT_ENTRY(ggc->entry), FALSE); | |
519 | |
16124
ab3f93232a2d
Add a utility function to assist scrolling in a textview.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
15871
diff
changeset
|
520 gnt_text_view_attach_scroll_widget(GNT_TEXT_VIEW(ggc->tv), ggc->entry); |
15818 | 521 g_signal_connect_after(G_OBJECT(ggc->entry), "key_pressed", G_CALLBACK(entry_key_pressed), ggc); |
522 g_signal_connect(G_OBJECT(ggc->window), "destroy", G_CALLBACK(closing_window), ggc); | |
523 | |
15823 | 524 gnt_widget_set_position(ggc->window, purple_prefs_get_int(PREF_ROOT "/position/x"), |
525 purple_prefs_get_int(PREF_ROOT "/position/y")); | |
15818 | 526 gnt_widget_show(ggc->window); |
527 | |
528 g_signal_connect(G_OBJECT(ggc->tv), "size_changed", G_CALLBACK(size_changed_cb), NULL); | |
529 g_signal_connect(G_OBJECT(ggc->window), "position_set", G_CALLBACK(save_position_cb), NULL); | |
530 | |
15823 | 531 if (type == PURPLE_CONV_TYPE_IM) { |
15818 | 532 g_signal_connect(G_OBJECT(ggc->entry), "text_changed", G_CALLBACK(send_typing_notification), ggc); |
533 } | |
534 | |
535 g_free(title); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
536 gnt_box_give_focus_to_child(GNT_BOX(ggc->window), ggc->entry); |
15818 | 537 } |
538 | |
539 static void | |
15823 | 540 finch_destroy_conversation(PurpleConversation *conv) |
15818 | 541 { |
542 /* do stuff here */ | |
543 FinchConv *ggc = conv->ui_data; | |
544 ggc->list = g_list_remove(ggc->list, conv); | |
545 if (ggc->list && conv == ggc->active_conv) | |
546 ggc->active_conv = ggc->list->data; | |
547 | |
548 if (ggc->list == NULL) { | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
549 g_free(ggc->u.chat); |
15818 | 550 gnt_widget_destroy(ggc->window); |
551 g_free(ggc); | |
552 } | |
553 } | |
554 | |
555 static void | |
15823 | 556 finch_write_common(PurpleConversation *conv, const char *who, const char *message, |
557 PurpleMessageFlags flags, time_t mtime) | |
15818 | 558 { |
559 FinchConv *ggconv = conv->ui_data; | |
560 char *strip, *newline; | |
561 GntTextFormatFlags fl = 0; | |
562 int pos; | |
563 gboolean notify; | |
564 | |
565 g_return_if_fail(ggconv != NULL); | |
566 | |
567 if (ggconv->active_conv != conv) { | |
15823 | 568 if (flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV)) |
15818 | 569 finch_conversation_set_active(conv); |
570 else | |
571 return; | |
572 } | |
573 | |
574 pos = gnt_text_view_get_lines_below(GNT_TEXT_VIEW(ggconv->tv)); | |
575 | |
576 notify = !!gnt_text_view_tag_change(GNT_TEXT_VIEW(ggconv->tv), "typing", NULL, TRUE); | |
577 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), "\n", GNT_TEXT_FLAG_NORMAL); | |
578 | |
579 /* Unnecessary to print the timestamp for delayed message */ | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
580 if (purple_prefs_get_bool("/finch/conversations/timestamps")) |
15818 | 581 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), |
15823 | 582 purple_utf8_strftime("(%H:%M:%S) ", localtime(&mtime)), GNT_TEXT_FLAG_DIM); |
15818 | 583 |
15823 | 584 if (flags & PURPLE_MESSAGE_AUTO_RESP) |
15818 | 585 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), |
586 _("<AUTO-REPLY> "), GNT_TEXT_FLAG_BOLD); | |
587 | |
15823 | 588 if (who && *who && (flags & (PURPLE_MESSAGE_SEND | PURPLE_MESSAGE_RECV))) |
15818 | 589 { |
590 char * name = NULL; | |
591 | |
15823 | 592 if (purple_message_meify((char*)message, -1)) |
15818 | 593 name = g_strdup_printf("*** %s ", who); |
594 else | |
595 name = g_strdup_printf("%s: ", who); | |
596 | |
597 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), | |
598 name, GNT_TEXT_FLAG_BOLD); | |
599 g_free(name); | |
600 } | |
601 else | |
602 fl = GNT_TEXT_FLAG_DIM; | |
603 | |
15823 | 604 if (flags & PURPLE_MESSAGE_ERROR) |
15818 | 605 fl |= GNT_TEXT_FLAG_BOLD; |
15823 | 606 if (flags & PURPLE_MESSAGE_NICK) |
15818 | 607 fl |= GNT_TEXT_FLAG_UNDERLINE; |
608 | |
609 /* XXX: Remove this workaround when textview can parse messages. */ | |
15823 | 610 newline = purple_strdup_withhtml(message); |
611 strip = purple_markup_strip_html(newline); | |
15818 | 612 gnt_text_view_append_text_with_flags(GNT_TEXT_VIEW(ggconv->tv), |
613 strip, fl); | |
614 | |
615 g_free(newline); | |
616 g_free(strip); | |
617 | |
618 if (notify) { | |
15823 | 619 strip = g_strdup_printf(_("\n%s is typing..."), purple_conversation_get_name(conv)); |
15818 | 620 gnt_text_view_append_text_with_tag(GNT_TEXT_VIEW(ggconv->tv), |
621 strip, GNT_TEXT_FLAG_DIM, "typing"); | |
622 g_free(strip); | |
623 } | |
624 | |
625 if (pos <= 1) | |
626 gnt_text_view_scroll(GNT_TEXT_VIEW(ggconv->tv), 0); | |
627 | |
15823 | 628 if (flags & (PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_NICK | PURPLE_MESSAGE_ERROR)) |
15818 | 629 gnt_widget_set_urgent(ggconv->tv); |
630 } | |
631 | |
632 static void | |
15823 | 633 finch_write_chat(PurpleConversation *conv, const char *who, const char *message, |
634 PurpleMessageFlags flags, time_t mtime) | |
15818 | 635 { |
15823 | 636 purple_conversation_write(conv, who, message, flags, mtime); |
15818 | 637 } |
638 | |
639 static void | |
15823 | 640 finch_write_im(PurpleConversation *conv, const char *who, const char *message, |
641 PurpleMessageFlags flags, time_t mtime) | |
15818 | 642 { |
15823 | 643 PurpleAccount *account = purple_conversation_get_account(conv); |
644 if (flags & PURPLE_MESSAGE_SEND) | |
15818 | 645 { |
15823 | 646 who = purple_connection_get_display_name(purple_account_get_connection(account)); |
15818 | 647 if (!who) |
15823 | 648 who = purple_account_get_alias(account); |
15818 | 649 if (!who) |
15823 | 650 who = purple_account_get_username(account); |
15818 | 651 } |
15823 | 652 else if (flags & PURPLE_MESSAGE_RECV) |
15818 | 653 { |
15823 | 654 PurpleBuddy *buddy; |
655 who = purple_conversation_get_name(conv); | |
656 buddy = purple_find_buddy(account, who); | |
15818 | 657 if (buddy) |
15823 | 658 who = purple_buddy_get_contact_alias(buddy); |
15818 | 659 } |
660 | |
15823 | 661 purple_conversation_write(conv, who, message, flags, mtime); |
15818 | 662 } |
663 | |
664 static void | |
15823 | 665 finch_write_conv(PurpleConversation *conv, const char *who, const char *alias, |
666 const char *message, PurpleMessageFlags flags, time_t mtime) | |
15818 | 667 { |
668 const char *name; | |
669 if (alias && *alias) | |
670 name = alias; | |
671 else if (who && *who) | |
672 name = who; | |
673 else | |
674 name = NULL; | |
675 | |
676 finch_write_common(conv, name, message, flags, mtime); | |
677 } | |
678 | |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
679 static const char * |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
680 chat_flag_text(PurpleConvChatBuddyFlags flags) |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
681 { |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
682 if (flags & PURPLE_CBFLAGS_FOUNDER) |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
683 return "~"; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
684 if (flags & PURPLE_CBFLAGS_OP) |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
685 return "@"; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
686 if (flags & PURPLE_CBFLAGS_HALFOP) |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
687 return "%"; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
688 if (flags & PURPLE_CBFLAGS_VOICE) |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
689 return "+"; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
690 return " "; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
691 } |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
692 |
15818 | 693 static void |
15823 | 694 finch_chat_add_users(PurpleConversation *conv, GList *users, gboolean new_arrivals) |
15818 | 695 { |
696 FinchConv *ggc = conv->ui_data; | |
697 GntEntry *entry = GNT_ENTRY(ggc->entry); | |
698 | |
699 if (!new_arrivals) | |
700 { | |
701 /* Print the list of users in the room */ | |
702 GString *string = g_string_new(_("List of users:\n")); | |
703 GList *iter; | |
704 | |
705 for (iter = users; iter; iter = iter->next) | |
706 { | |
15823 | 707 PurpleConvChatBuddy *cbuddy = iter->data; |
15818 | 708 char *str; |
709 | |
710 if ((str = cbuddy->alias) == NULL) | |
711 str = cbuddy->name; | |
712 g_string_append_printf(string, "[ %s ]", str); | |
713 } | |
714 | |
15823 | 715 purple_conversation_write(conv, NULL, string->str, |
716 PURPLE_MESSAGE_SYSTEM, time(NULL)); | |
15818 | 717 g_string_free(string, TRUE); |
718 } | |
719 | |
720 for (; users; users = users->next) | |
721 { | |
15823 | 722 PurpleConvChatBuddy *cbuddy = users->data; |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
723 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); |
15818 | 724 gnt_entry_add_suggest(entry, cbuddy->name); |
725 gnt_entry_add_suggest(entry, cbuddy->alias); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
726 gnt_tree_add_row_after(tree, g_strdup(cbuddy->name), |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
727 gnt_tree_create_row(tree, chat_flag_text(cbuddy->flags), cbuddy->alias), NULL, NULL); |
15818 | 728 } |
729 } | |
730 | |
731 static void | |
15823 | 732 finch_chat_rename_user(PurpleConversation *conv, const char *old, const char *new_n, const char *new_a) |
15818 | 733 { |
734 /* Update the name for string completion */ | |
735 FinchConv *ggc = conv->ui_data; | |
736 GntEntry *entry = GNT_ENTRY(ggc->entry); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
737 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
738 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), new_n); |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
739 |
15818 | 740 gnt_entry_remove_suggest(entry, old); |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
741 gnt_tree_remove(tree, (gpointer)old); |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
742 |
15818 | 743 gnt_entry_add_suggest(entry, new_n); |
744 gnt_entry_add_suggest(entry, new_a); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
745 gnt_tree_add_row_after(tree, g_strdup(new_n), |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
746 gnt_tree_create_row(tree, chat_flag_text(cb->flags), new_a), NULL, NULL); |
15818 | 747 } |
748 | |
749 static void | |
17104
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
750 finch_chat_remove_users(PurpleConversation *conv, GList *list) |
15818 | 751 { |
752 /* Remove the name from string completion */ | |
753 FinchConv *ggc = conv->ui_data; | |
754 GntEntry *entry = GNT_ENTRY(ggc->entry); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
755 for (; list; list = list->next) { |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
756 GntTree *tree = GNT_TREE(ggc->u.chat->userlist); |
15818 | 757 gnt_entry_remove_suggest(entry, list->data); |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
758 gnt_tree_remove(tree, list->data); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
759 } |
15818 | 760 } |
761 | |
762 static void | |
15823 | 763 finch_chat_update_user(PurpleConversation *conv, const char *user) |
15818 | 764 { |
17083
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
765 PurpleConvChatBuddy *cb = purple_conv_chat_cb_find(PURPLE_CONV_CHAT(conv), user); |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
766 FinchConv *ggc = conv->ui_data; |
f2137f75fd10
Show user flags in chat userlist.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
17032
diff
changeset
|
767 gnt_tree_change_text(GNT_TREE(ggc->u.chat->userlist), (gpointer)user, 0, chat_flag_text(cb->flags)); |
15818 | 768 } |
769 | |
15823 | 770 static PurpleConversationUiOps conv_ui_ops = |
15818 | 771 { |
17104
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
772 finch_create_conversation, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
773 finch_destroy_conversation, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
774 finch_write_chat, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
775 finch_write_im, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
776 finch_write_conv, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
777 finch_chat_add_users, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
778 finch_chat_rename_user, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
779 finch_chat_remove_users, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
780 finch_chat_update_user, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
781 NULL, /* present */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
782 NULL, /* has_focus */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
783 NULL, /* custom_smiley_add */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
784 NULL, /* custom_smiley_write */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
785 NULL, /* custom_smiley_close */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
786 NULL, /* send_confirm */ |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
787 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
788 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
789 NULL, |
46f2f86e08e4
Death to more futuristic struct initialization. This should be the last.
Richard Laager <rlaager@wiktel.com>
parents:
17083
diff
changeset
|
790 NULL |
15818 | 791 }; |
792 | |
15823 | 793 PurpleConversationUiOps *finch_conv_get_ui_ops() |
15818 | 794 { |
795 return &conv_ui_ops; | |
796 } | |
797 | |
798 /* Xerox */ | |
15823 | 799 static PurpleCmdRet |
800 say_command_cb(PurpleConversation *conv, | |
15818 | 801 const char *cmd, char **args, char **error, void *data) |
802 { | |
15823 | 803 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) |
804 purple_conv_im_send(PURPLE_CONV_IM(conv), args[0]); | |
805 else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) | |
806 purple_conv_chat_send(PURPLE_CONV_CHAT(conv), args[0]); | |
15818 | 807 |
15823 | 808 return PURPLE_CMD_RET_OK; |
15818 | 809 } |
810 | |
811 /* Xerox */ | |
15823 | 812 static PurpleCmdRet |
813 me_command_cb(PurpleConversation *conv, | |
15818 | 814 const char *cmd, char **args, char **error, void *data) |
815 { | |
816 char *tmp; | |
817 | |
818 tmp = g_strdup_printf("/me %s", args[0]); | |
819 | |
15823 | 820 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) |
821 purple_conv_im_send(PURPLE_CONV_IM(conv), tmp); | |
822 else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) | |
823 purple_conv_chat_send(PURPLE_CONV_CHAT(conv), tmp); | |
15818 | 824 |
825 g_free(tmp); | |
15823 | 826 return PURPLE_CMD_RET_OK; |
15818 | 827 } |
828 | |
829 /* Xerox */ | |
15823 | 830 static PurpleCmdRet |
831 debug_command_cb(PurpleConversation *conv, | |
15818 | 832 const char *cmd, char **args, char **error, void *data) |
833 { | |
834 char *tmp, *markup; | |
15823 | 835 PurpleCmdStatus status; |
15818 | 836 |
837 if (!g_ascii_strcasecmp(args[0], "version")) { | |
16941
00c24829e243
Patch #751 from 'Dustin Howett' to change the output string from /debug version.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16904
diff
changeset
|
838 tmp = g_strdup_printf("me is using Finch v%s.", VERSION); |
15818 | 839 markup = g_markup_escape_text(tmp, -1); |
840 | |
15823 | 841 status = purple_cmd_do_command(conv, tmp, markup, error); |
15818 | 842 |
843 g_free(tmp); | |
844 g_free(markup); | |
845 return status; | |
846 } else { | |
15823 | 847 purple_conversation_write(conv, NULL, _("Supported debug options are: version"), |
848 PURPLE_MESSAGE_NO_LOG|PURPLE_MESSAGE_ERROR, time(NULL)); | |
849 return PURPLE_CMD_STATUS_OK; | |
15818 | 850 } |
851 } | |
852 | |
853 /* Xerox */ | |
15823 | 854 static PurpleCmdRet |
855 clear_command_cb(PurpleConversation *conv, | |
15818 | 856 const char *cmd, char **args, char **error, void *data) |
857 { | |
858 FinchConv *ggconv = conv->ui_data; | |
859 gnt_text_view_clear(GNT_TEXT_VIEW(ggconv->tv)); | |
15823 | 860 return PURPLE_CMD_STATUS_OK; |
15818 | 861 } |
862 | |
863 /* Xerox */ | |
15823 | 864 static PurpleCmdRet |
865 help_command_cb(PurpleConversation *conv, | |
15818 | 866 const char *cmd, char **args, char **error, void *data) |
867 { | |
868 GList *l, *text; | |
869 GString *s; | |
870 | |
871 if (args[0] != NULL) { | |
872 s = g_string_new(""); | |
15823 | 873 text = purple_cmd_help(conv, args[0]); |
15818 | 874 |
875 if (text) { | |
876 for (l = text; l; l = l->next) | |
877 if (l->next) | |
878 g_string_append_printf(s, "%s\n", (char *)l->data); | |
879 else | |
880 g_string_append_printf(s, "%s", (char *)l->data); | |
881 } else { | |
882 g_string_append(s, _("No such command (in this context).")); | |
883 } | |
884 } else { | |
885 s = g_string_new(_("Use \"/help <command>\" for help on a specific command.\n" | |
886 "The following commands are available in this context:\n")); | |
887 | |
15823 | 888 text = purple_cmd_list(conv); |
15818 | 889 for (l = text; l; l = l->next) |
890 if (l->next) | |
891 g_string_append_printf(s, "%s, ", (char *)l->data); | |
892 else | |
893 g_string_append_printf(s, "%s.", (char *)l->data); | |
894 g_list_free(text); | |
895 } | |
896 | |
15823 | 897 purple_conversation_write(conv, NULL, s->str, PURPLE_MESSAGE_NO_LOG, time(NULL)); |
15818 | 898 g_string_free(s, TRUE); |
899 | |
15823 | 900 return PURPLE_CMD_STATUS_OK; |
15818 | 901 } |
902 | |
15823 | 903 static PurpleCmdRet |
904 cmd_show_window(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data) | |
15818 | 905 { |
906 void (*callback)() = data; | |
907 callback(); | |
15823 | 908 return PURPLE_CMD_STATUS_OK; |
15818 | 909 } |
910 | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
911 static PurpleCmdRet |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
912 users_command_cb(PurpleConversation *conv, const char *cmd, char **args, char **error, gpointer data) |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
913 { |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
914 FinchConv *fc = conv->ui_data; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
915 FinchConvChat *ch; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
916 if (!fc) |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
917 return PURPLE_CMD_STATUS_FAILED; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
918 |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
919 ch = fc->u.chat; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
920 gnt_widget_set_visible(ch->userlist, |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
921 (GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE))); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
922 gnt_box_readjust(GNT_BOX(fc->window)); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
923 gnt_box_give_focus_to_child(GNT_BOX(fc->window), fc->entry); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
924 purple_prefs_set_bool(PREF_USERLIST, !(GNT_WIDGET_IS_FLAG_SET(ch->userlist, GNT_WIDGET_INVISIBLE))); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
925 return PURPLE_CMD_STATUS_OK; |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
926 } |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
927 |
15818 | 928 void finch_conversation_init() |
929 { | |
15823 | 930 purple_prefs_add_none(PREF_ROOT); |
931 purple_prefs_add_none(PREF_ROOT "/size"); | |
932 purple_prefs_add_int(PREF_ROOT "/size/width", 70); | |
933 purple_prefs_add_int(PREF_ROOT "/size/height", 20); | |
934 purple_prefs_add_none(PREF_ROOT "/position"); | |
935 purple_prefs_add_int(PREF_ROOT "/position/x", 0); | |
936 purple_prefs_add_int(PREF_ROOT "/position/y", 0); | |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
937 purple_prefs_add_none(PREF_CHAT); |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
938 purple_prefs_add_bool(PREF_USERLIST, FALSE); |
15818 | 939 |
940 /* Xerox the commands */ | |
15823 | 941 purple_cmd_register("say", "S", PURPLE_CMD_P_DEFAULT, |
942 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 943 say_command_cb, _("say <message>: Send a message normally as if you weren't using a command."), NULL); |
15823 | 944 purple_cmd_register("me", "S", PURPLE_CMD_P_DEFAULT, |
945 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 946 me_command_cb, _("me <action>: Send an IRC style action to a buddy or chat."), NULL); |
15823 | 947 purple_cmd_register("debug", "w", PURPLE_CMD_P_DEFAULT, |
948 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 949 debug_command_cb, _("debug <option>: Send various debug information to the current conversation."), NULL); |
15823 | 950 purple_cmd_register("clear", "", PURPLE_CMD_P_DEFAULT, |
951 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 952 clear_command_cb, _("clear: Clears the conversation scrollback."), NULL); |
15823 | 953 purple_cmd_register("help", "w", PURPLE_CMD_P_DEFAULT, |
954 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, | |
15818 | 955 help_command_cb, _("help <command>: Help on a specific command."), NULL); |
16904
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
956 purple_cmd_register("users", "", PURPLE_CMD_P_DEFAULT, |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
957 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, |
b799918b6cdc
Add a /users command to toggle the userlist in chat windows.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16903
diff
changeset
|
958 users_command_cb, _("users: Show the list of users in the chat."), NULL); |
15818 | 959 |
960 /* Now some commands to bring up some other windows */ | |
15823 | 961 purple_cmd_register("plugins", "", PURPLE_CMD_P_DEFAULT, |
962 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 963 cmd_show_window, _("plugins: Show the plugins window."), finch_plugins_show_all); |
15823 | 964 purple_cmd_register("buddylist", "", PURPLE_CMD_P_DEFAULT, |
965 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 966 cmd_show_window, _("buddylist: Show the buddylist."), finch_blist_show); |
15823 | 967 purple_cmd_register("accounts", "", PURPLE_CMD_P_DEFAULT, |
968 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 969 cmd_show_window, _("accounts: Show the accounts window."), finch_accounts_show_all); |
15823 | 970 purple_cmd_register("debugwin", "", PURPLE_CMD_P_DEFAULT, |
971 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 972 cmd_show_window, _("debugwin: Show the debug window."), finch_debug_window_show); |
15823 | 973 purple_cmd_register("prefs", "", PURPLE_CMD_P_DEFAULT, |
974 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 975 cmd_show_window, _("prefs: Show the preference window."), finch_prefs_show_all); |
15823 | 976 purple_cmd_register("status", "", PURPLE_CMD_P_DEFAULT, |
977 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_IM, NULL, | |
15818 | 978 cmd_show_window, _("statuses: Show the savedstatuses window."), finch_savedstatus_show_all); |
17032
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
979 |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
980 purple_signal_connect(purple_conversations_get_handle(), "buddy-typing", finch_conv_get_handle(), |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
981 PURPLE_CALLBACK(update_buddy_typing), NULL); |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
982 purple_signal_connect(purple_conversations_get_handle(), "buddy-typing-stopped", finch_conv_get_handle(), |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
983 PURPLE_CALLBACK(update_buddy_typing), NULL); |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
984 purple_signal_connect(purple_conversations_get_handle(), "chat-left", finch_conv_get_handle(), |
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
985 PURPLE_CALLBACK(chat_left_cb), NULL); |
15818 | 986 } |
987 | |
988 void finch_conversation_uninit() | |
989 { | |
17032
d6e855aedc30
Notify when you leave a chat, after /part or /kick.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16989
diff
changeset
|
990 purple_signals_disconnect_by_handle(finch_conv_get_handle()); |
15818 | 991 } |
992 | |
15823 | 993 void finch_conversation_set_active(PurpleConversation *conv) |
15818 | 994 { |
995 FinchConv *ggconv = conv->ui_data; | |
15823 | 996 PurpleAccount *account; |
15818 | 997 char *title; |
998 | |
999 g_return_if_fail(ggconv); | |
1000 g_return_if_fail(g_list_find(ggconv->list, conv)); | |
1001 | |
1002 ggconv->active_conv = conv; | |
15823 | 1003 account = purple_conversation_get_account(conv); |
15818 | 1004 title = get_conversation_title(conv, account); |
1005 gnt_screen_rename_widget(ggconv->window, title); | |
1006 g_free(title); | |
1007 } | |
1008 | |
16128
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1009 void finch_conversation_set_info_widget(PurpleConversation *conv, GntWidget *widget) |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1010 { |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1011 FinchConv *fc = conv->ui_data; |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1012 int height, width; |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1013 |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1014 gnt_box_remove_all(GNT_BOX(fc->info)); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1015 |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1016 if (widget) { |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1017 gnt_box_add_widget(GNT_BOX(fc->info), widget); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1018 gnt_box_readjust(GNT_BOX(fc->info)); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1019 } |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1020 |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1021 gnt_widget_get_size(fc->window, &width, &height); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1022 gnt_box_readjust(GNT_BOX(fc->window)); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1023 gnt_screen_resize_widget(fc->window, width, height); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1024 gnt_box_give_focus_to_child(GNT_BOX(fc->window), fc->entry); |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1025 } |
7a2ffa981c1a
Allow adding information widgets in the conversation window.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
16124
diff
changeset
|
1026 |