Mercurial > pidgin.yaz
annotate src/gtkconv.c @ 10229:9aa0b6d11bbf
[gaim-migrate @ 11364]
This is a heavily warmenhoved patch from Alceste Scalas. Here's what it
changes:
If the user drags an image file into the buddy list or conversation, it
presents three options (when applicable):
Set as buddy icon - sets this image to be the buddy icon for this buddy
Send image file - Initiates a file transfer to send this image.
Insert in message - Inserts in the gtkimhtml for use as an IM image.
If the user drags a .desktop web link, it will insert a hyperlink in the
conversation. All other types of .desktop files fail with an error dialog.
If anyone can think of better ways to handle any of them, let me know.
This also happens to implement gaim_request_choice, which had previously
been unimplemented.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Mon, 22 Nov 2004 02:57:34 +0000 |
parents | ef7f9e69f03e |
children | a66cf83552dc |
rev | line source |
---|---|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
1 /** |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
2 * @file gtkconv.h GTK+ Conversation API |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
3 * @ingroup gtkui |
4359 | 4 * |
8046 | 5 * Gaim is the legal property of its developers, whose names are too numerous |
6 * to list here. Please refer to the COPYRIGHT file distributed with this | |
7 * source distribution. | |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
8 * |
4359 | 9 * This program is free software; you can redistribute it and/or modify |
10 * it under the terms of the GNU General Public License as published by | |
11 * the Free Software Foundation; either version 2 of the License, or | |
12 * (at your option) any later version. | |
13 * | |
14 * This program is distributed in the hope that it will be useful, | |
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 * GNU General Public License for more details. | |
18 * | |
19 * You should have received a copy of the GNU General Public License | |
20 * along with this program; if not, write to the Free Software | |
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
22 * | |
23 */ | |
9791 | 24 #include "internal.h" |
25 #include "gtkgaim.h" | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
26 |
4359 | 27 #ifndef _WIN32 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
28 # include <X11/Xlib.h> |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
29 #endif |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
30 |
4359 | 31 #ifdef USE_GTKSPELL |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
32 # include <gtkspell/gtkspell.h> |
7538
357eb1c39b72
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7476
diff
changeset
|
33 # ifdef _WIN32 |
357eb1c39b72
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7476
diff
changeset
|
34 # include "wspell.h" |
357eb1c39b72
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7476
diff
changeset
|
35 # endif |
4359 | 36 #endif |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
37 |
4359 | 38 #include <gdk/gdkkeysyms.h> |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
39 |
9699 | 40 #include "account.h" |
9130 | 41 #include "cmds.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
42 #include "debug.h" |
6982 | 43 #include "imgstore.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
44 #include "log.h" |
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5402
diff
changeset
|
45 #include "notify.h" |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
46 #include "prefs.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
47 #include "prpl.h" |
6038 | 48 #include "request.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
49 #include "sound.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
50 #include "util.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
51 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
52 #include "dnd-hints.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
53 #include "gtkblist.h" |
5717 | 54 #include "gtkconv.h" |
9709 | 55 #include "gtkdialogs.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
56 #include "gtkimhtml.h" |
8317 | 57 #include "gtkimhtmltoolbar.h" |
7431 | 58 #include "gtklog.h" |
5907
18486c860a46
[gaim-migrate @ 6339]
Christian Hammond <chipx86@chipx86.com>
parents:
5902
diff
changeset
|
59 #include "gtkpounce.h" |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
60 #include "gtkprivacy.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
61 #include "gtkutils.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
62 #include "stock.h" |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
63 |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
64 /* XXX */ |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
65 #include "gaim.h" |
4359 | 66 |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
67 #define AUTO_RESPONSE "<AUTO-REPLY> : " |
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
68 |
10175 | 69 #define SEND_COLOR "#16569E" |
70 #define RECV_COLOR "#A82F2F" | |
7854 | 71 |
10108 | 72 #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) |
73 | |
74 /* These colors come from the default GNOME palette */ | |
75 static GdkColor nick_colors[] = { | |
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
76 {0, 47616, 46336, 43776}, /* Basic 3D Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
77 {0, 32768, 32000, 29696}, /* Basic 3D Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
78 {0, 22016, 20992, 18432}, /* 3D Shadow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
79 {0, 33536, 42496, 32512}, /* Green Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
80 {0, 23808, 29952, 21760}, /* Green Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
81 {0, 17408, 22016, 12800}, /* Green Shadow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
82 {0, 57344, 46592, 44800}, /* Red Hilight */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
83 {0, 49408, 26112, 23040}, /* Red Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
84 {0, 34816, 17920, 12544}, /* Red Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
85 {0, 49408, 14336, 8704}, /* Red Shadow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
86 {0, 34816, 32512, 41728}, /* Purple Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
87 {0, 25088, 23296, 33024}, /* Purple Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
88 {0, 18688, 16384, 26112}, /* Purple Shadow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
89 {0, 40192, 47104, 53760}, /* Blue Hilight */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
90 {0, 29952, 36864, 44544}, /* Blue Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
91 {0, 57344, 49920, 40448}, /* Face Skin Medium */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
92 {0, 45824, 37120, 26880}, /* Face skin Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
93 {0, 33280, 26112, 18176}, /* Face Skin Shadow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
94 {0, 57088, 16896, 7680}, /* Accent Red */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
95 {0, 39168, 0, 0}, /* Accent Red Dark */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
96 {0, 60928, 54784, 32768}, /* Accent Yellow */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
97 {0, 17920, 40960, 17920}, /* Accent Green */ |
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
98 {0, 9728, 50944, 9728} /* Accent Green Dark */ |
4359 | 99 }; |
6291 | 100 |
4359 | 101 #define NUM_NICK_COLORS (sizeof(nick_colors) / sizeof(*nick_colors)) |
102 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
103 typedef struct |
4359 | 104 { |
105 GtkWidget *window; | |
106 | |
107 GtkWidget *entry; | |
108 GtkWidget *message; | |
109 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
110 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
111 |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
112 } InviteBuddyInfo; |
4359 | 113 |
114 static GtkWidget *invite_dialog = NULL; | |
115 | |
116 /* Prototypes. <-- because Paco-Paco hates this comment. */ | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
117 static void got_typing_keypress(GaimConversation *conv, gboolean first); |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
118 static GList *generate_invite_user_names(GaimConnection *gc); |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
119 static void add_chat_buddy_common(GaimConversation *conv, |
9554 | 120 const char *name); |
9605 | 121 static gboolean tab_complete(GaimConversation *conv); |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
122 static void update_typing_icon(GaimConversation *conv); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
123 static gboolean update_send_as_selection(GaimConvWindow *win); |
4602
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
124 static char *item_factory_translate_func (const char *path, gpointer func_data); |
4359 | 125 |
126 /************************************************************************** | |
127 * Callbacks | |
128 **************************************************************************/ | |
129 static gint | |
130 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d) | |
131 { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
132 GaimConvWindow *win = (GaimConvWindow *)d; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
133 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
134 gaim_conv_window_destroy(win); |
4361
25d5b2a7545f
[gaim-migrate @ 4627]
Christian Hammond <chipx86@chipx86.com>
parents:
4360
diff
changeset
|
135 |
25d5b2a7545f
[gaim-migrate @ 4627]
Christian Hammond <chipx86@chipx86.com>
parents:
4360
diff
changeset
|
136 return TRUE; |
4359 | 137 } |
138 | |
139 static gint | |
140 close_conv_cb(GtkWidget *w, gpointer d) | |
141 { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
142 GaimConversation *conv = (GaimConversation *)d; |
4359 | 143 |
144 gaim_conversation_destroy(conv); | |
4361
25d5b2a7545f
[gaim-migrate @ 4627]
Christian Hammond <chipx86@chipx86.com>
parents:
4360
diff
changeset
|
145 |
25d5b2a7545f
[gaim-migrate @ 4627]
Christian Hammond <chipx86@chipx86.com>
parents:
4360
diff
changeset
|
146 return TRUE; |
4359 | 147 } |
148 | |
8914 | 149 static gboolean |
150 size_allocate_cb(GtkWidget *w, GtkAllocation *allocation, GaimConversation *conv) | |
151 { | |
152 GaimGtkConversation *gtkconv; | |
9048 | 153 GaimConvWindow *win = gaim_conversation_get_window(conv); |
9459 | 154 gboolean saveheight; |
8914 | 155 |
156 if (!GTK_WIDGET_VISIBLE(w)) | |
157 return FALSE; | |
158 | |
159 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
160 return FALSE; | |
161 | |
162 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
163 | |
9459 | 164 /* we only save the new height if the formatting toolbar visibility matches the pref */ |
165 saveheight = (gtkconv->show_formatting_toolbar == gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar")); | |
166 | |
9048 | 167 /* I find that I resize the window when it has a bunch of conversations in it, mostly so that the tab bar |
168 * will fit, but then I don't want new windows taking up the entire screen. I check to see if there is only one | |
169 * conversation in the window. This way we'll be setting new windows to the size of the last resized new window. */ | |
170 | |
8914 | 171 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
172 { | |
10175 | 173 if (w == gtkconv->imhtml && (gaim_conv_window_get_conversation_count(win) == 1)) |
8914 | 174 { |
175 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width", allocation->width); | |
9459 | 176 if (saveheight) |
177 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height", allocation->height); | |
8914 | 178 } |
179 if (w == gtkconv->entry) | |
180 gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height", allocation->height); | |
181 } | |
182 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
183 { | |
10175 | 184 if (w == gtkconv->imhtml && (gaim_conv_window_get_conversation_count(win) == 1)) |
8914 | 185 { |
186 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width", allocation->width); | |
9459 | 187 if (saveheight) |
188 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height", allocation->height); | |
8914 | 189 } |
190 if (w == gtkconv->entry) | |
191 gaim_prefs_set_int("/gaim/gtk/conversations/chat/entry_height", allocation->height); | |
192 } | |
193 | |
194 return FALSE; | |
195 } | |
196 | |
7446
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
197 /* Courtesy of Galeon! */ |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
198 static void |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
199 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state) |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
200 { |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
201 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
202 gtk_widget_set_state(widget, GTK_STATE_NORMAL); |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
203 } |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
204 |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
205 static void |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
206 default_formatize(GaimConversation *conv) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
207 { |
8061 | 208 GaimGtkConversation *c = GAIM_GTK_CONVERSATION(conv); |
209 GaimConnection *gc = gaim_conversation_get_gc(conv); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
210 |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
211 if (gc && gc->flags & GAIM_CONNECTION_HTML) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
212 { |
9025 | 213 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_formatting")) |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
214 { |
9025 | 215 char *color; |
216 GdkColor fg_color, bg_color; | |
217 | |
218 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold")) | |
219 gtk_imhtml_toggle_bold(GTK_IMHTML(c->entry)); | |
220 | |
221 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic")) | |
222 gtk_imhtml_toggle_italic(GTK_IMHTML(c->entry)); | |
223 | |
224 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline")) | |
225 gtk_imhtml_toggle_underline(GTK_IMHTML(c->entry)); | |
226 | |
227 gtk_imhtml_toggle_fontface(GTK_IMHTML(c->entry), | |
228 gaim_prefs_get_string("/gaim/gtk/conversations/font_face")); | |
229 | |
230 if (!(gc->flags & GAIM_CONNECTION_NO_FONTSIZE)) | |
231 gtk_imhtml_font_set_size(GTK_IMHTML(c->entry), | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
232 gaim_prefs_get_int("/gaim/gtk/conversations/font_size")); |
9025 | 233 |
234 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), "") != 0) | |
235 { | |
236 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), | |
237 &fg_color); | |
238 color = g_strdup_printf("#%02x%02x%02x", | |
239 fg_color.red / 256, | |
240 fg_color.green / 256, | |
241 fg_color.blue / 256); | |
242 } | |
243 else | |
244 color = g_strdup(""); | |
245 | |
8061 | 246 gtk_imhtml_toggle_forecolor(GTK_IMHTML(c->entry), color); |
247 g_free(color); | |
9025 | 248 |
249 if(!(gc->flags & GAIM_CONNECTION_NO_BGCOLOR) && | |
250 strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), "") != 0) | |
251 { | |
252 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), | |
253 &bg_color); | |
254 color = g_strdup_printf("#%02x%02x%02x", | |
255 bg_color.red / 256, | |
256 bg_color.green / 256, | |
257 bg_color.blue / 256); | |
258 } | |
259 else | |
260 color = g_strdup(""); | |
261 | |
8061 | 262 gtk_imhtml_toggle_backcolor(GTK_IMHTML(c->entry), color); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
263 g_free(color); |
8061 | 264 } |
8677 | 265 |
9025 | 266 |
8677 | 267 if (gc->flags & GAIM_CONNECTION_FORMATTING_WBFO) |
268 gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(c->entry), TRUE); | |
269 else | |
270 gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(c->entry), FALSE); | |
8061 | 271 } |
272 } | |
9130 | 273 |
274 static const char * | |
275 gaim_gtk_get_cmd_prefix(void) | |
276 { | |
277 return "/"; | |
278 } | |
279 | |
9167 | 280 static GaimCmdRet |
9829 | 281 say_command_cb(GaimConversation *conv, |
282 const char *cmd, char **args, char **error, void *data) | |
283 { | |
284 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) | |
285 gaim_conv_im_send(GAIM_CONV_IM(conv), args[0]); | |
286 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
287 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), args[0]); | |
288 | |
289 return GAIM_CMD_RET_OK; | |
290 } | |
291 | |
292 static GaimCmdRet | |
9167 | 293 me_command_cb(GaimConversation *conv, |
9597 | 294 const char *cmd, char **args, char **error, void *data) |
9167 | 295 { |
296 char *tmp; | |
297 | |
298 tmp = g_strdup_printf("/me %s", args[0]); | |
9175 | 299 |
9167 | 300 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
301 gaim_conv_im_send(GAIM_CONV_IM(conv), tmp); | |
302 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
303 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), tmp); | |
304 | |
305 g_free(tmp); | |
306 return GAIM_CMD_RET_OK; | |
307 } | |
308 | |
9212 | 309 static GaimCmdRet |
310 debug_command_cb(GaimConversation *conv, | |
9597 | 311 const char *cmd, char **args, char **error, void *data) |
9212 | 312 { |
313 char *tmp, *markup; | |
314 GaimCmdStatus status; | |
315 | |
316 if (!g_ascii_strcasecmp(args[0], "version")) { | |
317 tmp = g_strdup_printf(_("me is using Gaim v%s."), VERSION); | |
318 markup = gaim_escape_html(tmp); | |
319 | |
320 status = gaim_cmd_do_command(conv, tmp, markup, error); | |
321 | |
322 g_free(tmp); | |
323 g_free(markup); | |
324 return status; | |
325 } else { | |
326 gaim_conversation_write(conv, NULL, _("Supported debug options are: version"), | |
327 GAIM_MESSAGE_NO_LOG|GAIM_MESSAGE_ERROR, time(NULL)); | |
328 return GAIM_CMD_STATUS_OK; | |
329 } | |
330 } | |
331 | |
9213 | 332 static GaimCmdRet |
333 help_command_cb(GaimConversation *conv, | |
9597 | 334 const char *cmd, char **args, char **error, void *data) |
9213 | 335 { |
9597 | 336 GList *l, *text; |
9213 | 337 GString *s; |
9597 | 338 |
339 if (args[0] != NULL) { | |
340 s = g_string_new(""); | |
341 text = gaim_cmd_help(conv, args[0]); | |
342 | |
343 if (text) { | |
344 for (l = text; l; l = l->next) | |
345 if (l->next) | |
9816 | 346 g_string_append_printf(s, "%s\n", (char *)l->data); |
9597 | 347 else |
9816 | 348 g_string_append_printf(s, "%s", (char *)l->data); |
9597 | 349 } else { |
350 g_string_append(s, _("No such command (in this context).")); | |
351 } | |
352 } else { | |
353 s = g_string_new(_("Use \"/help <command>\" for help on a specific command.\n" | |
354 "The following commands are available in this context:\n")); | |
355 | |
356 text = gaim_cmd_list(conv); | |
357 for (l = text; l; l = l->next) | |
9213 | 358 if (l->next) |
9597 | 359 g_string_append_printf(s, "%s, ", (char *)l->data); |
9213 | 360 else |
9597 | 361 g_string_append_printf(s, "%s.", (char *)l->data); |
9213 | 362 } |
363 | |
364 gaim_conversation_write(conv, NULL, s->str, GAIM_MESSAGE_NO_LOG, time(NULL)); | |
365 g_string_free(s, TRUE); | |
366 | |
367 return GAIM_CMD_STATUS_OK; | |
368 } | |
369 | |
4359 | 370 static void |
9374 | 371 send_history_add(GaimConversation *conv, const char *message) |
372 { | |
373 GList *first; | |
374 | |
375 first = g_list_first(conv->send_history); | |
376 | |
377 if (first->data) | |
378 g_free(first->data); | |
379 | |
380 first->data = g_strdup(message); | |
381 | |
382 conv->send_history = g_list_prepend(first, NULL); | |
383 } | |
384 | |
9832 | 385 static gboolean |
386 check_for_and_do_command(GaimConversation *conv) | |
387 { | |
388 GaimGtkConversation *gtkconv; | |
389 char *cmd; | |
390 const char *prefix; | |
391 GaimAccount *account; | |
392 GtkTextIter start; | |
393 | |
394 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
395 account = gaim_conversation_get_account(conv); | |
396 prefix = gaim_gtk_get_cmd_prefix(); | |
397 | |
398 cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); | |
399 gtk_text_buffer_get_start_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &start); | |
400 | |
401 if (cmd && (strncmp(cmd, prefix, strlen(prefix)) == 0) | |
402 && !gtk_text_iter_get_child_anchor(&start)) { | |
403 GaimCmdStatus status; | |
404 char *error, *cmdline, *markup, *send_history; | |
405 GtkTextIter end; | |
406 | |
407 send_history = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); | |
408 send_history_add(conv, send_history); | |
409 g_free(send_history); | |
410 | |
411 cmdline = cmd + strlen(prefix); | |
412 | |
413 gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); | |
414 gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); | |
415 markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); | |
416 status = gaim_cmd_do_command(conv, cmdline, markup, &error); | |
417 g_free(cmd); | |
418 g_free(markup); | |
419 | |
420 switch (status) { | |
421 case GAIM_CMD_STATUS_OK: | |
422 return TRUE; | |
423 case GAIM_CMD_STATUS_NOT_FOUND: | |
424 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/passthrough_unknown_commands")) { | |
425 gaim_conversation_write(conv, "", _("No such command."), | |
426 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
427 | |
428 return TRUE; | |
429 } | |
430 return FALSE; | |
431 case GAIM_CMD_STATUS_WRONG_ARGS: | |
432 gaim_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " | |
433 "to that command."), | |
434 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
435 return TRUE; | |
436 case GAIM_CMD_STATUS_FAILED: | |
437 gaim_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), | |
438 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
439 if(error) | |
440 g_free(error); | |
441 return TRUE; | |
442 case GAIM_CMD_STATUS_WRONG_TYPE: | |
443 if(gaim_conversation_get_type(conv) == GAIM_CONV_IM) | |
444 gaim_conversation_write(conv, "", _("That command only works in Chats, not IMs."), | |
445 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
446 else | |
447 gaim_conversation_write(conv, "", _("That command only works in IMs, not Chats."), | |
448 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
449 return TRUE; | |
450 case GAIM_CMD_STATUS_WRONG_PRPL: | |
451 gaim_conversation_write(conv, "", _("That command doesn't work on this protocol."), | |
452 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
453 return TRUE; | |
454 } | |
455 } | |
456 | |
457 g_free(cmd); | |
458 return FALSE; | |
459 } | |
460 | |
9374 | 461 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
462 send_cb(GtkWidget *widget, GaimConversation *conv) |
4359 | 463 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
464 GaimGtkConversation *gtkconv; |
8655 | 465 GaimAccount *account; |
8677 | 466 GaimConnection *gc; |
8448 | 467 char *buf, *clean; |
4359 | 468 |
469 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
8655 | 470 account = gaim_conversation_get_account(conv); |
9130 | 471 |
9471 | 472 if (!gaim_account_is_connected(account)) |
473 return; | |
474 | |
9474 | 475 if ((gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) && |
476 gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv))) | |
9471 | 477 return; |
478 | |
9832 | 479 if (check_for_and_do_command(conv)) { |
480 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); | |
481 default_formatize(conv); | |
482 return; | |
9130 | 483 } |
484 | |
8442 | 485 buf = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); |
8962 | 486 clean = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); |
8448 | 487 |
4359 | 488 gtk_widget_grab_focus(gtkconv->entry); |
489 | |
8448 | 490 if (strlen(clean) == 0) { |
491 g_free(clean); | |
4359 | 492 return; |
493 } | |
494 | |
8677 | 495 gc = gaim_account_get_connection(account); |
496 if (gc && (gc->flags & GAIM_CONNECTION_NO_NEWLINES)) { | |
497 char **bufs; | |
498 int i; | |
499 | |
500 bufs = gtk_imhtml_get_markup_lines(GTK_IMHTML(gtkconv->entry)); | |
501 for (i = 0; bufs[i]; i++) { | |
9374 | 502 send_history_add(conv, bufs[i]); |
8677 | 503 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
504 gaim_conv_im_send(GAIM_CONV_IM(conv), bufs[i]); | |
505 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
506 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), bufs[i]); | |
507 } | |
508 | |
509 g_strfreev(bufs); | |
510 | |
511 } else { | |
9374 | 512 send_history_add(conv, buf); |
8677 | 513 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
514 gaim_conv_im_send(GAIM_CONV_IM(conv), buf); | |
515 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
516 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), buf); | |
517 } | |
4359 | 518 |
8677 | 519 g_free(clean); |
4359 | 520 g_free(buf); |
521 | |
8061 | 522 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
523 default_formatize(conv); | |
4359 | 524 } |
525 | |
526 static void | |
7928 | 527 add_remove_cb(GtkWidget *widget, GaimConversation *conv) |
4359 | 528 { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
529 GaimAccount *account; |
4359 | 530 const char *name; |
531 | |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
532 account = gaim_conversation_get_account(conv); |
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
533 name = gaim_conversation_get_name(conv); |
7879 | 534 |
535 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { | |
7859 | 536 GaimBuddy *b; |
537 | |
538 b = gaim_find_buddy(account, name); | |
539 if (b != NULL) | |
9730 | 540 gaim_gtkdialogs_remove_buddy(b); |
7859 | 541 else if (account != NULL && gaim_account_is_connected(account)) |
542 gaim_blist_request_add_buddy(account, (char *)name, NULL, NULL); | |
7879 | 543 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { |
7859 | 544 GaimChat *c; |
545 | |
546 c = gaim_blist_find_chat(account, name); | |
547 if (c != NULL) | |
9730 | 548 gaim_gtkdialogs_remove_chat(c); |
7859 | 549 else if (account != NULL && gaim_account_is_connected(account)) |
9754 | 550 gaim_blist_request_add_chat(account, NULL, NULL, name); |
7859 | 551 } |
4359 | 552 |
553 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
554 } | |
555 | |
7975 | 556 static void chat_do_info(GaimConversation *conv, const char *who) |
557 { | |
558 GaimPluginProtocolInfo *prpl_info = NULL; | |
559 GaimConnection *gc; | |
560 | |
561 if ((gc = gaim_conversation_get_gc(conv))) { | |
562 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
563 | |
564 /* | |
565 * If there are special needs for getting info on users in | |
566 * buddy chat "rooms"... | |
567 */ | |
568 if (prpl_info->get_cb_info != NULL) | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
569 { |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
570 prpl_info->get_cb_info(gc, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
571 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
572 } |
7975 | 573 else |
574 prpl_info->get_info(gc, who); | |
575 } | |
576 } | |
577 | |
578 | |
4359 | 579 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
580 info_cb(GtkWidget *widget, GaimConversation *conv) |
4359 | 581 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
582 GaimGtkConversation *gtkconv; |
4359 | 583 |
584 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
585 | |
7879 | 586 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
587 serv_get_info(gaim_conversation_get_gc(conv), | |
588 gaim_conversation_get_name(conv)); | |
589 | |
590 gtk_widget_grab_focus(gtkconv->entry); | |
591 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { | |
592 /* Get info of the person currently selected in the GtkTreeView */ | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
593 GaimGtkChatPane *gtkchat; |
4359 | 594 GtkTreeIter iter; |
595 GtkTreeModel *model; | |
596 GtkTreeSelection *sel; | |
9554 | 597 char *name; |
4359 | 598 |
599 gtkchat = gtkconv->u.chat; | |
600 | |
601 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
602 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); | |
603 | |
604 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
9498 | 605 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
4359 | 606 else |
607 return; | |
608 | |
7975 | 609 chat_do_info(conv, name); |
9554 | 610 g_free(name); |
4359 | 611 } |
612 } | |
613 | |
614 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
615 block_cb(GtkWidget *widget, GaimConversation *conv) |
4359 | 616 { |
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
617 GaimAccount *account; |
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
618 |
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
619 account = gaim_conversation_get_account(conv); |
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
620 |
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
621 if (account != NULL && gaim_account_is_connected(account)) |
6399
d726a36628e8
[gaim-migrate @ 6904]
Christian Hammond <chipx86@chipx86.com>
parents:
6398
diff
changeset
|
622 gaim_gtk_request_add_block(account, gaim_conversation_get_name(conv)); |
4359 | 623 |
624 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
625 } | |
626 | |
627 static void | |
9468 | 628 send_file_cb(GtkWidget *widget, GaimConversation *conv) |
629 { | |
630 serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL); | |
631 } | |
632 | |
633 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
634 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info) |
4359 | 635 { |
636 const char *buddy, *message; | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
637 GaimGtkConversation *gtkconv; |
4359 | 638 |
639 gtkconv = GAIM_GTK_CONVERSATION(info->conv); | |
640 | |
641 if (resp == GTK_RESPONSE_OK) { | |
642 buddy = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry)); | |
643 message = gtk_entry_get_text(GTK_ENTRY(info->message)); | |
644 | |
10113 | 645 if (!g_ascii_strcasecmp(buddy, "")) |
4359 | 646 return; |
647 | |
648 serv_chat_invite(gaim_conversation_get_gc(info->conv), | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
649 gaim_conv_chat_get_id(GAIM_CONV_CHAT(info->conv)), |
4359 | 650 message, buddy); |
651 } | |
652 | |
653 gtk_widget_destroy(invite_dialog); | |
654 invite_dialog = NULL; | |
655 | |
656 g_free(info); | |
657 } | |
658 | |
659 static void | |
9909 | 660 invite_dnd_recv(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, |
661 GtkSelectionData *sd, guint inf, guint t, gpointer data) | |
662 { | |
663 InviteBuddyInfo *info = (InviteBuddyInfo *)data; | |
664 const char *convprotocol; | |
665 | |
666 convprotocol = gaim_account_get_protocol_id(gaim_conversation_get_account(info->conv)); | |
667 | |
668 if (sd->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE)) | |
669 { | |
670 GaimBlistNode *node = NULL; | |
671 GaimBuddy *buddy; | |
672 | |
673 memcpy(&node, sd->data, sizeof(node)); | |
674 | |
675 if (GAIM_BLIST_NODE_IS_CONTACT(node)) | |
676 buddy = gaim_contact_get_priority_buddy((GaimContact *)node); | |
677 else if (GAIM_BLIST_NODE_IS_BUDDY(node)) | |
678 buddy = (GaimBuddy *)node; | |
679 else | |
680 return; | |
681 | |
682 if (strcmp(convprotocol, gaim_account_get_protocol_id(buddy->account))) | |
683 { | |
684 gaim_notify_error(NULL, NULL, | |
685 _("That buddy is not on the same protocol as this " | |
686 "chat"), NULL); | |
687 } | |
688 else | |
689 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry), buddy->name); | |
690 | |
691 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); | |
692 } | |
693 else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) | |
694 { | |
695 char *protocol = NULL; | |
696 char *username = NULL; | |
697 GaimAccount *account; | |
698 | |
699 if (gaim_gtk_parse_x_im_contact(sd->data, FALSE, &account, | |
700 &protocol, &username, NULL)) | |
701 { | |
702 if (account == NULL) | |
703 { | |
704 gaim_notify_error(NULL, NULL, | |
705 _("You are not currently signed on with an account that " | |
706 "can invite that buddy."), NULL); | |
707 } | |
708 else if (strcmp(convprotocol, gaim_account_get_protocol_id(account))) | |
709 { | |
710 gaim_notify_error(NULL, NULL, | |
711 _("That buddy is not on the same protocol as this " | |
712 "chat"), NULL); | |
713 } | |
714 else | |
715 { | |
716 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry), username); | |
717 } | |
718 } | |
719 | |
720 if (username != NULL) g_free(username); | |
721 if (protocol != NULL) g_free(protocol); | |
722 | |
723 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); | |
724 } | |
725 } | |
726 | |
727 static const GtkTargetEntry dnd_targets[] = | |
728 { | |
729 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, 0}, | |
730 {"application/x-im-contact", 0, 1} | |
731 }; | |
732 | |
733 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
734 invite_cb(GtkWidget *widget, GaimConversation *conv) |
4359 | 735 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
736 InviteBuddyInfo *info = NULL; |
4359 | 737 |
738 if (invite_dialog == NULL) { | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
739 GaimConnection *gc; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
740 GaimConvWindow *win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
741 GaimGtkWindow *gtkwin; |
4359 | 742 GtkWidget *label; |
743 GtkWidget *vbox, *hbox; | |
744 GtkWidget *table; | |
745 GtkWidget *img; | |
746 | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
747 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
748 GTK_ICON_SIZE_DIALOG); |
4359 | 749 |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
750 info = g_new0(InviteBuddyInfo, 1); |
4359 | 751 info->conv = conv; |
752 | |
753 gc = gaim_conversation_get_gc(conv); | |
754 win = gaim_conversation_get_window(conv); | |
755 gtkwin = GAIM_GTK_WINDOW(win); | |
756 | |
757 /* Create the new dialog. */ | |
758 invite_dialog = gtk_dialog_new_with_buttons( | |
7859 | 759 _("Invite Buddy Into Chat Room"), |
7879 | 760 GTK_WINDOW(gtkwin->window), 0, |
761 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
9443
3584cdab1d0b
[gaim-migrate @ 10264]
Christian Hammond <chipx86@chipx86.com>
parents:
9374
diff
changeset
|
762 GAIM_STOCK_INVITE, GTK_RESPONSE_OK, NULL); |
4359 | 763 |
764 gtk_dialog_set_default_response(GTK_DIALOG(invite_dialog), | |
765 GTK_RESPONSE_OK); | |
766 gtk_container_set_border_width(GTK_CONTAINER(invite_dialog), 6); | |
767 gtk_window_set_resizable(GTK_WINDOW(invite_dialog), FALSE); | |
768 gtk_dialog_set_has_separator(GTK_DIALOG(invite_dialog), FALSE); | |
769 | |
9909 | 770 info->window = GTK_WIDGET(invite_dialog); |
771 | |
4359 | 772 /* Setup the outside spacing. */ |
773 vbox = GTK_DIALOG(invite_dialog)->vbox; | |
774 | |
775 gtk_box_set_spacing(GTK_BOX(vbox), 12); | |
776 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); | |
777 | |
778 /* Setup the inner hbox and put the dialog's icon in it. */ | |
779 hbox = gtk_hbox_new(FALSE, 12); | |
780 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
781 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
782 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
783 | |
784 /* Setup the right vbox. */ | |
785 vbox = gtk_vbox_new(FALSE, 0); | |
786 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
787 | |
788 /* Put our happy label in it. */ | |
789 label = gtk_label_new(_("Please enter the name of the user you wish " | |
790 "to invite, along with an optional invite " | |
791 "message.")); | |
792 gtk_widget_set_size_request(label, 350, -1); | |
793 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
794 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
795 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
796 | |
797 /* hbox for the table, and to give it some spacing on the left. */ | |
798 hbox = gtk_hbox_new(FALSE, 6); | |
799 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
800 | |
801 /* Setup the table we're going to use to lay stuff out. */ | |
802 table = gtk_table_new(2, 2, FALSE); | |
803 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | |
804 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | |
805 gtk_container_set_border_width(GTK_CONTAINER(table), 12); | |
806 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
807 | |
808 /* Now the Buddy label */ | |
809 label = gtk_label_new(NULL); | |
810 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Buddy:")); | |
811 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
812 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
813 | |
814 /* Now the Buddy drop-down entry field. */ | |
815 info->entry = gtk_combo_new(); | |
816 gtk_combo_set_case_sensitive(GTK_COMBO(info->entry), FALSE); | |
817 gtk_entry_set_activates_default( | |
818 GTK_ENTRY(GTK_COMBO(info->entry)->entry), TRUE); | |
819 | |
820 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); | |
821 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->entry); | |
822 | |
823 /* Fill in the names. */ | |
824 gtk_combo_set_popdown_strings(GTK_COMBO(info->entry), | |
825 generate_invite_user_names(gc)); | |
826 | |
827 | |
828 /* Now the label for "Message" */ | |
829 label = gtk_label_new(NULL); | |
830 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Message:")); | |
831 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
832 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
833 | |
834 | |
835 /* And finally, the Message entry field. */ | |
836 info->message = gtk_entry_new(); | |
837 gtk_entry_set_activates_default(GTK_ENTRY(info->message), TRUE); | |
838 | |
839 gtk_table_attach_defaults(GTK_TABLE(table), info->message, 1, 2, 1, 2); | |
840 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->message); | |
841 | |
842 /* Connect the signals. */ | |
843 g_signal_connect(G_OBJECT(invite_dialog), "response", | |
844 G_CALLBACK(do_invite), info); | |
9909 | 845 /* Setup drag-and-drop */ |
846 gtk_drag_dest_set(info->window, | |
847 GTK_DEST_DEFAULT_MOTION | | |
848 GTK_DEST_DEFAULT_DROP, | |
849 dnd_targets, | |
850 sizeof(dnd_targets) / sizeof(GtkTargetEntry), | |
851 GDK_ACTION_COPY); | |
852 gtk_drag_dest_set(info->entry, | |
853 GTK_DEST_DEFAULT_MOTION | | |
854 GTK_DEST_DEFAULT_DROP, | |
855 dnd_targets, | |
856 sizeof(dnd_targets) / sizeof(GtkTargetEntry), | |
857 GDK_ACTION_COPY); | |
858 | |
859 g_signal_connect(G_OBJECT(info->window), "drag_data_received", | |
860 G_CALLBACK(invite_dnd_recv), info); | |
861 g_signal_connect(G_OBJECT(info->entry), "drag_data_received", | |
862 G_CALLBACK(invite_dnd_recv), info); | |
863 | |
4359 | 864 } |
865 | |
866 gtk_widget_show_all(invite_dialog); | |
867 | |
868 if (info != NULL) | |
869 gtk_widget_grab_focus(GTK_COMBO(info->entry)->entry); | |
870 } | |
871 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
872 static void |
7748 | 873 menu_new_conv_cb(gpointer data, guint action, GtkWidget *widget) |
874 { | |
9714 | 875 gaim_gtkdialogs_im(); |
7748 | 876 } |
877 | |
878 static void | |
9504 | 879 savelog_writefile_cb(void *user_data, const char *filename) |
9489 | 880 { |
9504 | 881 GaimConversation *conv = (GaimConversation *)user_data; |
9489 | 882 FILE *fp; |
883 const char *name; | |
884 | |
885 if ((fp = fopen(filename, "w+")) == NULL) { | |
9504 | 886 gaim_notify_error(conv, NULL, _("Unable to open file."), NULL); |
9489 | 887 return; |
888 } | |
889 | |
890 name = gaim_conversation_get_name(conv); | |
891 fprintf(fp, _("<h1>Conversation with %s</h1>\n"), name); | |
892 fprintf(fp, "%s", conv->history->str); | |
893 fclose(fp); | |
894 } | |
895 | |
896 static void | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
897 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
898 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
899 GaimConvWindow *win = (GaimConvWindow *)data; |
9489 | 900 GaimConversation *conv = gaim_conv_window_get_active_conversation(win); |
901 gchar *buf; | |
902 | |
903 buf = g_strdup_printf("%s.html", gaim_normalize(conv->account, conv->name)); | |
9504 | 904 |
905 gaim_request_file(conv, _("Save Conversation"), buf, TRUE, | |
906 G_CALLBACK(savelog_writefile_cb), NULL, conv); | |
9489 | 907 |
908 g_free(buf); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
909 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
910 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
911 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
912 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
913 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
914 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
915 GaimConversation *conv; |
9917 | 916 GaimLogType type; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
917 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
918 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
919 |
9917 | 920 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
921 type = GAIM_LOG_IM; | |
922 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
923 type = GAIM_LOG_CHAT; | |
924 else | |
925 return; | |
926 | |
927 gaim_gtk_log_show(type, gaim_conversation_get_name(conv), | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
928 gaim_conversation_get_account(conv)); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
929 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
930 |
8974 | 931 static void |
932 menu_clear_cb(gpointer data, guint action, GtkWidget *widget) | |
933 { | |
934 GaimConvWindow *win = (GaimConvWindow *)data; | |
935 GaimConversation *conv; | |
936 GaimGtkConversation *gtkconv; | |
937 | |
938 conv = gaim_conv_window_get_active_conversation(win); | |
939 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
940 | |
941 gtk_imhtml_clear(GTK_IMHTML(gtkconv->imhtml)); | |
942 g_string_free(conv->history, TRUE); | |
943 conv->history = g_string_new(""); | |
944 } | |
945 | |
7295 | 946 struct _search { |
947 GaimGtkConversation *gtkconv; | |
948 GtkWidget *entry; | |
949 }; | |
950 | |
7929 | 951 static void do_search_cb(GtkWidget *widget, gint resp, struct _search *s) |
7295 | 952 { |
7929 | 953 switch (resp) { |
954 case GTK_RESPONSE_OK: | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
955 gtk_imhtml_search_find(GTK_IMHTML(s->gtkconv->imhtml), |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
956 gtk_entry_get_text(GTK_ENTRY(s->entry))); |
7929 | 957 break; |
958 | |
959 case GTK_RESPONSE_DELETE_EVENT: | |
960 case GTK_RESPONSE_CLOSE: | |
961 gtk_imhtml_search_clear(GTK_IMHTML(s->gtkconv->imhtml)); | |
962 gtk_widget_destroy(s->gtkconv->dialogs.search); | |
963 s->gtkconv->dialogs.search = NULL; | |
964 g_free(s); | |
965 break; | |
966 } | |
7295 | 967 } |
968 | |
969 static void | |
7751 | 970 menu_find_cb(gpointer data, guint action, GtkWidget *widget) |
7295 | 971 { |
972 GaimConvWindow *win = (GaimConvWindow *)data; | |
973 GaimConversation *conv = gaim_conv_window_get_active_conversation(win); | |
974 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); | |
975 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); | |
7929 | 976 GtkWidget *hbox; |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
977 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
978 GTK_ICON_SIZE_DIALOG); |
7929 | 979 GtkWidget *label; |
7295 | 980 struct _search *s; |
981 | |
7798 | 982 if (gtkconv->dialogs.search) { |
983 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search)); | |
7295 | 984 return; |
7798 | 985 } |
7300
41bbe5534441
[gaim-migrate @ 7884]
Christian Hammond <chipx86@chipx86.com>
parents:
7298
diff
changeset
|
986 |
7295 | 987 s = g_malloc(sizeof(struct _search)); |
988 s->gtkconv = gtkconv; | |
7929 | 989 |
990 gtkconv->dialogs.search = gtk_dialog_new_with_buttons(_("Find"), | |
991 GTK_WINDOW(gtkwin->window), GTK_DIALOG_DESTROY_WITH_PARENT, | |
992 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, | |
993 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
994 gtk_dialog_set_default_response(GTK_DIALOG(gtkconv->dialogs.search), |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
995 GTK_RESPONSE_OK); |
7929 | 996 g_signal_connect(G_OBJECT(gtkconv->dialogs.search), "response", |
997 G_CALLBACK(do_search_cb), s); | |
998 | |
999 gtk_container_set_border_width(GTK_CONTAINER(gtkconv->dialogs.search), 6); | |
1000 gtk_window_set_resizable(GTK_WINDOW(gtkconv->dialogs.search), FALSE); | |
1001 gtk_dialog_set_has_separator(GTK_DIALOG(gtkconv->dialogs.search), FALSE); | |
1002 gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 12); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1003 gtk_container_set_border_width( |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1004 GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), 6); |
7929 | 1005 |
1006 hbox = gtk_hbox_new(FALSE, 12); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1007 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1008 hbox); |
7929 | 1009 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
1010 | |
1011 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1012 gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search), |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1013 GTK_RESPONSE_OK, FALSE); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1014 |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1015 label = gtk_label_new(NULL); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1016 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:")); |
7929 | 1017 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
1018 | |
1019 s->entry = gtk_entry_new(); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1020 gtk_entry_set_activates_default(GTK_ENTRY(s->entry), TRUE); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1021 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(s->entry)); |
7929 | 1022 g_signal_connect(G_OBJECT(s->entry), "changed", |
1023 G_CALLBACK(gaim_gtk_set_sensitive_if_input), | |
1024 gtkconv->dialogs.search); | |
1025 gtk_box_pack_start(GTK_BOX(hbox), s->entry, FALSE, FALSE, 0); | |
7300
41bbe5534441
[gaim-migrate @ 7884]
Christian Hammond <chipx86@chipx86.com>
parents:
7298
diff
changeset
|
1026 |
7295 | 1027 gtk_widget_show_all(gtkconv->dialogs.search); |
7929 | 1028 gtk_widget_grab_focus(s->entry); |
7295 | 1029 } |
1030 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1031 static void |
9468 | 1032 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget) |
1033 { | |
1034 GaimConvWindow *win = (GaimConvWindow *)data; | |
1035 GaimConversation *conv = gaim_conv_window_get_active_conversation(win); | |
1036 | |
1037 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { | |
1038 serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL); | |
1039 } | |
1040 | |
1041 } | |
1042 | |
1043 static void | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1044 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1045 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1046 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1047 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1048 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1049 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1050 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1051 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv), |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1052 gaim_conversation_get_name(conv), NULL); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1053 } |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1054 |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1055 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1056 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1057 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1058 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1059 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1060 GaimGtkConversation *gtkconv; |
8756 | 1061 GtkIMHtmlToolbar *toolbar; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1062 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1063 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1064 gtkconv = GAIM_GTK_CONVERSATION(conv); |
8756 | 1065 toolbar = GTK_IMHTMLTOOLBAR(gtkconv->toolbar); |
1066 | |
1067 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), | |
1068 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1069 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1070 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1071 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1072 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1073 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1074 GaimConvWindow *win = (GaimConvWindow *)data; |
8756 | 1075 GaimConversation *conv; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1076 GaimGtkConversation *gtkconv; |
8756 | 1077 GtkIMHtmlToolbar *toolbar; |
1078 | |
1079 conv = gaim_conv_window_get_active_conversation(win); | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1080 gtkconv = GAIM_GTK_CONVERSATION(gaim_conv_window_get_active_conversation(win)); |
8756 | 1081 toolbar = GTK_IMHTMLTOOLBAR(gtkconv->toolbar); |
1082 | |
1083 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), | |
1084 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1085 } |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1086 |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1087 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1088 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1089 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1090 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1091 GaimConversation *conv; |
7879 | 1092 GaimAccount *account; |
1093 const char *name; | |
1094 | |
1095 conv = gaim_conv_window_get_active_conversation(win); | |
1096 account = gaim_conversation_get_account(conv); | |
1097 name = gaim_conversation_get_name(conv); | |
1098 | |
1099 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { | |
1100 GaimBuddy *b; | |
1101 | |
1102 b = gaim_find_buddy(account, name); | |
1103 if (b != NULL) | |
9730 | 1104 gaim_gtkdialogs_alias_buddy(b); |
7879 | 1105 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { |
1106 GaimChat *c; | |
1107 | |
1108 c = gaim_blist_find_chat(account, name); | |
1109 if (c != NULL) | |
9730 | 1110 gaim_gtkdialogs_alias_chat(c); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1111 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1112 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1113 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1114 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1115 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1116 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1117 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1118 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1119 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1120 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1121 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1122 info_cb(NULL, conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1123 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1124 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1125 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1126 menu_invite_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1127 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1128 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1129 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1130 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1131 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1132 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1133 invite_cb(NULL, conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1134 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1135 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1136 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1137 menu_warn_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1138 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1139 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1140 GaimConversation *conv; |
10025 | 1141 GaimConnection *gc; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1142 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1143 conv = gaim_conv_window_get_active_conversation(win); |
10025 | 1144 gc = gaim_conversation_get_gc(conv); |
1145 | |
1146 gaim_gtkdialogs_warn(gc, gaim_conversation_get_name(conv)); | |
1147 | |
1148 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1149 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1150 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1151 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1152 menu_block_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1153 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1154 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1155 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1156 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1157 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1158 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1159 block_cb(NULL, conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1160 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1161 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1162 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1163 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1164 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1165 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1166 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1167 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1168 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1169 |
7928 | 1170 add_remove_cb(NULL, conv); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1171 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1172 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1173 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1174 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1175 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1176 GaimConvWindow *win = (GaimConvWindow *)data; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1177 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1178 close_conv_cb(NULL, gaim_conv_window_get_active_conversation(win)); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1179 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1180 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1181 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1182 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1183 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1184 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1185 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1186 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1187 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1188 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1189 if (conv == NULL) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1190 return; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1191 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1192 gaim_conversation_set_logging(conv, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1193 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1194 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1195 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1196 static void |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1197 menu_toolbar_cb(gpointer data, guint action, GtkWidget *widget) |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1198 { |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1199 GaimConvWindow *win = (GaimConvWindow *)data; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1200 GaimConversation *conv; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1201 GaimGtkConversation *gtkconv; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1202 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1203 conv = gaim_conv_window_get_active_conversation(win); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1204 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1205 if (conv == NULL) |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1206 return; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1207 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1208 gtkconv = GAIM_GTK_CONVERSATION(conv); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1209 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1210 gtkconv->show_formatting_toolbar = |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1211 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1212 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1213 if (gtkconv->show_formatting_toolbar) |
8317 | 1214 gtk_widget_show(gtkconv->toolbar); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1215 else |
8317 | 1216 gtk_widget_hide(gtkconv->toolbar); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1217 } |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1218 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1219 static void |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1220 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1221 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1222 GaimConvWindow *win = (GaimConvWindow *)data; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1223 GaimConversation *conv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1224 GaimGtkConversation *gtkconv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1225 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1226 conv = gaim_conv_window_get_active_conversation(win); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1227 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1228 if (!conv) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1229 return; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1230 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1231 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1232 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1233 gtkconv->make_sound = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1234 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1235 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1236 |
7961 | 1237 static void |
9188 | 1238 menu_timestamps_cb(gpointer data, guint action, GtkWidget *widget) |
1239 { | |
1240 GaimConvWindow *win = (GaimConvWindow *)data; | |
1241 GaimConversation *conv; | |
1242 GaimGtkConversation *gtkconv; | |
1243 | |
1244 conv = gaim_conv_window_get_active_conversation(win); | |
1245 | |
1246 if (!conv) | |
1247 return; | |
1248 | |
1249 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
1250 | |
1251 gtkconv->show_timestamps = | |
1252 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); | |
1253 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), | |
1254 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); | |
1255 } | |
1256 | |
1257 static void | |
7961 | 1258 chat_do_im(GaimConversation *conv, const char *who) |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1259 { |
7961 | 1260 GaimPluginProtocolInfo *prpl_info = NULL; |
1261 char *real_who; | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1262 GaimConversation *conv2; |
7961 | 1263 GaimAccount *account; |
1264 | |
1265 account = gaim_conversation_get_account(conv); | |
1266 | |
1267 if(account && account->gc) | |
1268 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
1269 | |
1270 if(prpl_info && prpl_info->get_cb_real_name) | |
1271 real_who = prpl_info->get_cb_real_name(account->gc, | |
1272 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); | |
1273 else | |
1274 real_who = g_strdup(who); | |
1275 | |
1276 if(!real_who) | |
1277 return; | |
1278 | |
1279 conv2 = gaim_find_conversation_with_account(real_who, account); | |
1280 | |
1281 if (conv2 != NULL) | |
1282 gaim_conv_window_show(gaim_conversation_get_window(conv2)); | |
1283 else | |
1284 conv2 = gaim_conversation_new(GAIM_CONV_IM, account, real_who); | |
1285 | |
1286 g_free(real_who); | |
1287 } | |
1288 | |
1289 | |
1290 static void | |
1291 chat_im_button_cb(GtkWidget *widget, GaimConversation *conv) | |
1292 { | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1293 GaimGtkConversation *gtkconv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1294 GaimGtkChatPane *gtkchat; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1295 GtkTreeIter iter; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1296 GtkTreeModel *model; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1297 GtkTreeSelection *sel; |
9554 | 1298 char *name; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1299 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1300 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1301 gtkchat = gtkconv->u.chat; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1302 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1303 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1304 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1305 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1306 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) |
9498 | 1307 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1308 else |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1309 return; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1310 |
7961 | 1311 chat_do_im(conv, name); |
9554 | 1312 g_free(name); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1313 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1314 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1315 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1316 ignore_cb(GtkWidget *w, GaimConversation *conv) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1317 { |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1318 GaimGtkConversation *gtkconv; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1319 GaimGtkChatPane *gtkchat; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1320 GaimConvChat *chat; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1321 GtkTreeIter iter; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1322 GtkTreeModel *model; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1323 GtkTreeSelection *sel; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1324 const char *name; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1325 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1326 chat = GAIM_CONV_CHAT(conv); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1327 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1328 gtkchat = gtkconv->u.chat; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1329 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1330 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1331 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1332 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1333 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { |
9498 | 1334 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1335 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1336 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1337 else |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1338 return; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1339 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1340 if (gaim_conv_chat_is_user_ignored(chat, name)) |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1341 gaim_conv_chat_unignore(chat, name); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1342 else |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1343 gaim_conv_chat_ignore(chat, name); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1344 |
9554 | 1345 add_chat_buddy_common(conv, name); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1346 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1347 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1348 static void |
7398 | 1349 menu_chat_im_cb(GtkWidget *w, GaimConversation *conv) |
1350 { | |
1351 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); | |
1352 | |
1353 chat_do_im(conv, who); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1354 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1355 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1356 static void |
9468 | 1357 menu_chat_send_file_cb(GtkWidget *w, GaimConversation *conv) |
1358 { | |
1359 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); | |
1360 GaimConnection *gc = gaim_conversation_get_gc(conv); | |
1361 | |
1362 serv_send_file(gc, who, NULL); | |
1363 } | |
1364 | |
1365 static void | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1366 menu_chat_info_cb(GtkWidget *w, GaimConversation *conv) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1367 { |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1368 char *who; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1369 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1370 who = g_object_get_data(G_OBJECT(w), "user_data"); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1371 |
7975 | 1372 chat_do_info(conv, who); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1373 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1374 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1375 static void |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1376 menu_chat_get_away_cb(GtkWidget *w, GaimConversation *conv) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1377 { |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1378 GaimPluginProtocolInfo *prpl_info = NULL; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1379 GaimConnection *gc; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1380 char *who; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1381 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1382 gc = gaim_conversation_get_gc(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1383 who = g_object_get_data(G_OBJECT(w), "user_data"); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1384 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1385 if (gc != NULL) { |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1386 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1387 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1388 /* |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1389 * May want to expand this to work similarly to menu_info_cb? |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1390 */ |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1391 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1392 if (prpl_info->get_cb_away != NULL) |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1393 { |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1394 prpl_info->get_cb_away(gc, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1395 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1396 } |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1397 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1398 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1399 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1400 static void |
7928 | 1401 menu_chat_add_remove_cb(GtkWidget *w, GaimConversation *conv) |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1402 { |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1403 GaimAccount *account; |
6695 | 1404 GaimBuddy *b; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1405 char *name; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1406 |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1407 account = gaim_conversation_get_account(conv); |
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1408 name = g_object_get_data(G_OBJECT(w), "user_data"); |
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1409 b = gaim_find_buddy(account, name); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1410 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1411 if (b != NULL) |
9730 | 1412 gaim_gtkdialogs_remove_buddy(b); |
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1413 else if (account != NULL && gaim_account_is_connected(account)) |
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1414 gaim_blist_request_add_buddy(account, name, NULL, NULL); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1415 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1416 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1417 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1418 |
8143 | 1419 static GtkWidget * |
1420 create_chat_menu(GaimConversation *conv, gchar *who, | |
1421 GaimPluginProtocolInfo *prpl_info, GaimConnection *gc) | |
1422 { | |
1423 static GtkWidget *menu = NULL; | |
1424 GtkWidget *button; | |
1425 | |
1426 /* | |
1427 * If a menu already exists, destroy it before creating a new one, | |
1428 * thus freeing-up the memory it occupied. | |
1429 */ | |
1430 if (menu) | |
1431 gtk_widget_destroy(menu); | |
1432 | |
1433 menu = gtk_menu_new(); | |
1434 | |
10221 | 1435 button = gaim_new_item_from_stock(menu, _("IM"), GAIM_STOCK_IM, |
1436 G_CALLBACK(menu_chat_im_cb), conv, 0, 0, NULL); | |
8143 | 1437 g_object_set_data(G_OBJECT(button), "user_data", who); |
1438 | |
9468 | 1439 if (gc && prpl_info && prpl_info->send_file |
1440 && (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who))) { | |
10223 | 1441 button = gaim_new_item_from_stock(menu, _("Send File"), |
10221 | 1442 GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(menu_chat_send_file_cb), |
1443 conv, 0, 0, NULL); | |
9468 | 1444 g_object_set_data(G_OBJECT(button), "user_data", who); |
1445 } | |
9498 | 1446 |
8143 | 1447 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who)) |
10221 | 1448 button = gaim_new_item_from_stock(menu, _("Un-Ignore"), GAIM_STOCK_IGNORE, |
1449 G_CALLBACK(ignore_cb), conv, 0, 0, NULL); | |
8143 | 1450 else |
10221 | 1451 button = gaim_new_item_from_stock(menu, _("Ignore"), GAIM_STOCK_IGNORE, |
1452 G_CALLBACK(ignore_cb), conv, 0, 0, NULL); | |
8143 | 1453 g_object_set_data(G_OBJECT(button), "user_data", who); |
1454 | |
8170 | 1455 if (gc && (prpl_info->get_info || prpl_info->get_cb_info)) { |
10221 | 1456 button = gaim_new_item_from_stock(menu, _("Info"), GAIM_STOCK_INFO, |
1457 G_CALLBACK(menu_chat_info_cb), conv, 0, 0, NULL); | |
8143 | 1458 g_object_set_data(G_OBJECT(button), "user_data", who); |
1459 } | |
1460 | |
1461 if (gc && prpl_info->get_cb_away) { | |
10221 | 1462 button = gaim_new_item_from_stock(menu, _("Get Away Message"), GAIM_STOCK_AWAY, |
1463 G_CALLBACK(menu_chat_get_away_cb), conv, 0, 0, NULL); | |
8143 | 1464 g_object_set_data(G_OBJECT(button), "user_data", who); |
1465 } | |
1466 | |
8170 | 1467 /* XXX: jabber can only add buddies from here in certain circumstances */ |
8143 | 1468 /* Added by Jonas <jonas@birme.se> */ |
1469 if (gc) { | |
1470 if (gaim_find_buddy(gc->account, who)) | |
10221 | 1471 button = gaim_new_item_from_stock(menu, _("Remove"), GTK_STOCK_REMOVE, |
10224 | 1472 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL); |
8143 | 1473 else |
10221 | 1474 button = gaim_new_item_from_stock(menu, _("Add"), GTK_STOCK_ADD, |
10224 | 1475 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL); |
8143 | 1476 } |
1477 /* End Jonas */ | |
1478 | |
1479 return menu; | |
1480 } | |
1481 | |
1482 | |
1483 static gint | |
1484 gtkconv_chat_popup_menu_cb(GtkWidget *widget, GaimConversation *conv) | |
1485 { | |
1486 GaimGtkConversation *gtkconv; | |
1487 GaimPluginProtocolInfo *prpl_info = NULL; | |
1488 GaimGtkChatPane *gtkchat; | |
1489 GaimConnection *gc; | |
1490 GaimAccount *account; | |
1491 GtkTreeSelection *sel; | |
1492 GtkTreeIter iter; | |
1493 GtkTreeModel *model; | |
1494 GtkWidget *menu; | |
1495 gchar *who; | |
1496 | |
1497 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
1498 gtkchat = gtkconv->u.chat; | |
1499 account = gaim_conversation_get_account(conv); | |
1500 gc = account->gc; | |
1501 | |
1502 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
1503 | |
1504 if (gc != NULL) | |
1505 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
1506 | |
1507 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); | |
1508 if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
1509 return FALSE; | |
1510 | |
9498 | 1511 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); |
8143 | 1512 menu = create_chat_menu (conv, who, prpl_info, gc); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1513 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1514 gaim_gtk_treeview_popup_menu_position_func, widget, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1515 0, GDK_CURRENT_TIME); |
8143 | 1516 |
1517 return TRUE; | |
1518 } | |
1519 | |
1520 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1521 static gint |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1522 right_click_chat_cb(GtkWidget *widget, GdkEventButton *event, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1523 GaimConversation *conv) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1524 { |
8143 | 1525 GaimGtkConversation *gtkconv; |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1526 GaimPluginProtocolInfo *prpl_info = NULL; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1527 GaimGtkChatPane *gtkchat; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1528 GaimConnection *gc; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1529 GaimAccount *account; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1530 GtkTreePath *path; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1531 GtkTreeIter iter; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1532 GtkTreeModel *model; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1533 GtkTreeViewColumn *column; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1534 gchar *who; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1535 int x, y; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1536 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1537 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1538 gtkchat = gtkconv->u.chat; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1539 account = gaim_conversation_get_account(conv); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1540 gc = account->gc; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1541 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1542 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1543 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1544 gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(gtkchat->list), |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1545 event->x, event->y, &path, &column, &x, &y); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1546 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1547 if (path == NULL) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1548 return FALSE; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1549 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1550 if (gc != NULL) |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1551 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1552 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1553 gtk_tree_selection_select_path(GTK_TREE_SELECTION( |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1554 gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list))), path); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1555 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1556 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); |
9498 | 1557 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1558 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1559 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { |
7398 | 1560 chat_do_im(conv, who); |
9554 | 1561 g_free(who); |
7398 | 1562 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { |
8143 | 1563 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1564 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1565 event->button, event->time); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1566 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1567 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1568 return TRUE; |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1569 } |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1570 |
8133 | 1571 static void |
1572 move_to_next_unread_tab(GaimConversation *conv) | |
1573 { | |
1574 GaimConversation *next_conv = NULL; | |
1575 GaimConvWindow *win; | |
1576 GList *l; | |
1577 int index, i; | |
1578 | |
1579 win = gaim_conversation_get_window(conv); | |
1580 index = gaim_conversation_get_index(conv); | |
1581 | |
1582 /* First check the tabs after this position. */ | |
1583 for (l = g_list_nth(gaim_conv_window_get_conversations(win), index); | |
1584 l != NULL; | |
1585 l = l->next) { | |
1586 | |
1587 next_conv = (GaimConversation *)l->data; | |
1588 | |
1589 if (gaim_conversation_get_unseen(next_conv) > 0) | |
1590 break; | |
1591 | |
1592 next_conv = NULL; | |
1593 } | |
1594 | |
1595 if (next_conv == NULL) { | |
1596 | |
1597 /* Now check before this position. */ | |
1598 for (l = gaim_conv_window_get_conversations(win), i = 0; | |
1599 l != NULL && i < index; | |
1600 l = l->next) { | |
1601 | |
1602 next_conv = (GaimConversation *)l->data; | |
1603 | |
1604 if (gaim_conversation_get_unseen(next_conv) > 0) | |
1605 break; | |
1606 | |
1607 next_conv = NULL; | |
1608 } | |
1609 | |
1610 if (next_conv == NULL) { | |
1611 /* Okay, just grab the next conversation tab. */ | |
1612 if (index == gaim_conv_window_get_conversation_count(win) - 1) | |
1613 next_conv = gaim_conv_window_get_conversation_at(win, 0); | |
1614 else | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1615 { |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1616 next_conv = gaim_conv_window_get_conversation_at(win, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1617 index + 1); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1618 } |
8133 | 1619 } |
1620 } | |
1621 | |
1622 if (next_conv != NULL && next_conv != conv) { | |
1623 gaim_conv_window_switch_conversation(win, | |
1624 gaim_conversation_get_index(next_conv)); | |
1625 } | |
1626 } | |
1627 | |
4359 | 1628 static gboolean |
8105 | 1629 entry_key_press_cb(GtkWidget *entry, GdkEventKey *event, gpointer data) |
4359 | 1630 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1631 GaimConvWindow *win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1632 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1633 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1634 GaimGtkWindow *gtkwin; |
8105 | 1635 int numconvs; |
1636 int curconv; | |
1637 | |
1638 conv = (GaimConversation *)data; | |
1639 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
1640 win = gaim_conversation_get_window(conv); | |
1641 gtkwin = GAIM_GTK_WINDOW(win); | |
1642 numconvs = gaim_conv_window_get_conversation_count(win); | |
1643 curconv = gaim_conversation_get_index(conv); | |
1644 | |
1645 /* If CTRL was held down... */ | |
1646 if (event->state & GDK_CONTROL_MASK) { | |
4359 | 1647 switch (event->keyval) { |
1648 case GDK_Up: | |
1649 if (!conv->send_history) | |
1650 break; | |
1651 | |
1652 if (!conv->send_history->prev) { | |
1653 GtkTextIter start, end; | |
1654 | |
1655 if (conv->send_history->data) | |
1656 g_free(conv->send_history->data); | |
1657 | |
1658 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, | |
1659 &start); | |
1660 gtk_text_buffer_get_end_iter(gtkconv->entry_buffer, &end); | |
1661 | |
1662 conv->send_history->data = | |
8506 | 1663 gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); |
4359 | 1664 } |
8677 | 1665 |
4359 | 1666 if (conv->send_history->next && |
1667 conv->send_history->next->data) { | |
8677 | 1668 GtkTextIter iter; |
1669 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); | |
4359 | 1670 |
1671 conv->send_history = conv->send_history->next; | |
8061 | 1672 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1673 gtk_imhtml_append_text_with_images( |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1674 GTK_IMHTML(gtkconv->entry), conv->send_history->data, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1675 0, NULL); |
8677 | 1676 /* this is mainly just a hack so the formatting at the |
1677 * cursor gets picked up. */ | |
1678 gtk_text_buffer_get_end_iter(buffer, &iter); | |
1679 gtk_text_buffer_move_mark_by_name(buffer, "insert", &iter); | |
4359 | 1680 } |
1681 | |
8105 | 1682 return TRUE; |
4359 | 1683 break; |
1684 | |
1685 case GDK_Down: | |
1686 if (!conv->send_history) | |
1687 break; | |
1688 | |
8105 | 1689 if (conv->send_history->prev && |
1690 conv->send_history->prev->data) { | |
8677 | 1691 GtkTextIter iter; |
1692 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); | |
8105 | 1693 |
4359 | 1694 conv->send_history = conv->send_history->prev; |
8105 | 1695 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1696 gtk_imhtml_append_text_with_images( |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1697 GTK_IMHTML(gtkconv->entry), conv->send_history->data, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1698 0, NULL); |
8677 | 1699 /* this is mainly just a hack so the formatting at the |
1700 * cursor gets picked up. */ | |
1701 gtk_text_buffer_get_end_iter(buffer, &iter); | |
1702 gtk_text_buffer_move_mark_by_name(buffer, "insert", &iter); | |
4359 | 1703 } |
1704 | |
8105 | 1705 return TRUE; |
4359 | 1706 break; |
8105 | 1707 |
8108 | 1708 case GDK_Page_Down: |
8143 | 1709 case ']': |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1710 gaim_conv_window_switch_conversation(win, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1711 (curconv + 1) % numconvs); |
8105 | 1712 |
1713 return TRUE; | |
1714 break; | |
1715 | |
8108 | 1716 case GDK_Page_Up: |
8143 | 1717 case '[': |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1718 gaim_conv_window_switch_conversation(win, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1719 (curconv + numconvs - 1) % numconvs); |
8133 | 1720 |
1721 return TRUE; | |
1722 break; | |
1723 | |
8108 | 1724 case GDK_Tab: |
8133 | 1725 move_to_next_unread_tab(conv); |
8108 | 1726 |
1727 return TRUE; | |
1728 break; | |
1729 | |
1730 case 'z': | |
1731 gtk_window_iconify(GTK_WINDOW(gtkwin->window)); | |
8105 | 1732 |
1733 return TRUE; | |
1734 break; | |
1735 | |
1736 } /* End of switch */ | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1737 } |
8758 | 1738 |
8105 | 1739 /* If ALT (or whatever) was held down... */ |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1740 else if (event->state & GDK_MOD1_MASK) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1741 { |
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8730
diff
changeset
|
1742 /* XXX - Make sure the conv exists before switching to it */ |
8105 | 1743 if (event->keyval > '0' && event->keyval <= '9') { |
1744 int switchto = event->keyval - '1'; | |
1745 if (switchto < numconvs) | |
1746 gaim_conv_window_switch_conversation(win, switchto); | |
4359 | 1747 |
1748 return TRUE; | |
1749 } | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1750 } |
8758 | 1751 |
8105 | 1752 /* If neither CTRL nor ALT were held down... */ |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1753 else |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1754 { |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1755 switch (event->keyval) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1756 { |
10115 | 1757 case GDK_Tab: |
9605 | 1758 return tab_complete(conv); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1759 break; |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1760 |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1761 case GDK_Page_Up: |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1762 gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml)); |
8105 | 1763 return TRUE; |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1764 break; |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1765 |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1766 case GDK_Page_Down: |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1767 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml)); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1768 return TRUE; |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1769 break; |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1770 |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1771 } |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1772 } |
4359 | 1773 return FALSE; |
1774 } | |
1775 | |
1776 /* | |
1777 * NOTE: | |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
1778 * This guy just kills a single right click from being propagated any |
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
1779 * further. I have no idea *why* we need this, but we do ... It |
4359 | 1780 * prevents right clicks on the GtkTextView in a convo dialog from |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
1781 * going all the way down to the notebook. I suspect a bug in |
4359 | 1782 * GtkTextView, but I'm not ready to point any fingers yet. |
1783 */ | |
1784 static gboolean | |
1785 entry_stop_rclick_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) | |
1786 { | |
1787 if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { | |
1788 /* Right single click */ | |
1789 g_signal_stop_emission_by_name(G_OBJECT(widget), "button_press_event"); | |
1790 | |
1791 return TRUE; | |
1792 } | |
1793 | |
1794 return FALSE; | |
1795 } | |
1796 | |
8173 | 1797 /* |
1798 * If someone tries to type into the conversation backlog of a | |
1799 * conversation window then we yank focus from the conversation backlog | |
1800 * and give it to the text entry box so that people can type | |
1801 * all the live long day and it will get entered into the entry box. | |
1802 */ | |
6057 | 1803 static gboolean |
8105 | 1804 refocus_entry_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
6057 | 1805 { |
1806 GaimGtkConversation *gtkconv = data; | |
1807 | |
8237 | 1808 /* If we have a valid key for the conversation display, then exit */ |
8224 | 1809 if ((event->state & GDK_CONTROL_MASK) || |
8237 | 1810 (event->keyval == GDK_F10) || |
1811 (event->keyval == GDK_Shift_L) || | |
1812 (event->keyval == GDK_Shift_R) || | |
1813 (event->keyval == GDK_Escape) || | |
8177 | 1814 (event->keyval == GDK_Up) || |
1815 (event->keyval == GDK_Down) || | |
1816 (event->keyval == GDK_Left) || | |
8191 | 1817 (event->keyval == GDK_Right) || |
1818 (event->keyval == GDK_Home) || | |
9297 | 1819 (event->keyval == GDK_End) || |
1820 (event->keyval == GDK_Tab) || | |
1821 (event->keyval == GDK_ISO_Left_Tab)) | |
8177 | 1822 return FALSE; |
1823 | |
1824 if (event->type == GDK_KEY_RELEASE) | |
1825 gtk_widget_grab_focus(gtkconv->entry); | |
1826 | |
1827 gtk_widget_event(gtkconv->entry, (GdkEvent *)event); | |
1828 | |
1829 return TRUE; | |
6057 | 1830 } |
1831 | |
4359 | 1832 static void |
4673 | 1833 menu_conv_sel_send_cb(GObject *m, gpointer data) |
4359 | 1834 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1835 GaimConvWindow *win = g_object_get_data(m, "user_data"); |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
1836 GaimAccount *account = g_object_get_data(m, "gaim_account"); |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1837 GaimConversation *conv; |
8456 | 1838 GaimGtkConversation *gtkconv; |
4359 | 1839 |
10059
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
1840 if (gtk_check_menu_item_get_active((GtkCheckMenuItem*) m) == FALSE) |
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
1841 return; |
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
1842 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1843 conv = gaim_conv_window_get_active_conversation(win); |
4359 | 1844 |
4491 | 1845 gaim_conversation_set_account(conv, account); |
8456 | 1846 |
1847 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
1848 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), | |
9699 | 1849 gaim_account_get_protocol_name(conv->account)); |
4359 | 1850 } |
1851 | |
1852 static void | |
1853 insert_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *position, | |
1854 gchar *new_text, gint new_text_length, gpointer user_data) | |
1855 { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1856 GaimConversation *conv = (GaimConversation *)user_data; |
4359 | 1857 |
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
1858 g_return_if_fail(conv != NULL); |
4359 | 1859 |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
1860 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing")) |
4359 | 1861 return; |
1862 | |
1863 got_typing_keypress(conv, (gtk_text_iter_is_start(position) && | |
1864 gtk_text_iter_is_end(position))); | |
1865 } | |
1866 | |
1867 static void | |
1868 delete_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *start_pos, | |
1869 GtkTextIter *end_pos, gpointer user_data) | |
1870 { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1871 GaimConversation *conv = (GaimConversation *)user_data; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1872 GaimConvIm *im; |
4359 | 1873 |
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
1874 g_return_if_fail(conv != NULL); |
4359 | 1875 |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
1876 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing")) |
4359 | 1877 return; |
1878 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1879 im = GAIM_CONV_IM(conv); |
4359 | 1880 |
1881 if (gtk_text_iter_is_start(start_pos) && gtk_text_iter_is_end(end_pos)) { | |
1882 | |
1883 /* We deleted all the text, so turn off typing. */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1884 if (gaim_conv_im_get_type_again_timeout(im)) |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1885 gaim_conv_im_stop_type_again_timeout(im); |
4359 | 1886 |
1887 serv_send_typing(gaim_conversation_get_gc(conv), | |
6695 | 1888 gaim_conversation_get_name(conv), |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
1889 GAIM_NOT_TYPING); |
4359 | 1890 } |
1891 else { | |
1892 /* We're deleting, but not all of it, so it counts as typing. */ | |
1893 got_typing_keypress(conv, FALSE); | |
1894 } | |
1895 } | |
1896 | |
1897 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1898 notebook_init_grab(GaimGtkWindow *gtkwin, GtkWidget *widget) |
4359 | 1899 { |
1900 static GdkCursor *cursor = NULL; | |
1901 | |
1902 gtkwin->in_drag = TRUE; | |
1903 | |
1904 if (gtkwin->drag_leave_signal) { | |
1905 g_signal_handler_disconnect(G_OBJECT(widget), | |
1906 gtkwin->drag_leave_signal); | |
1907 | |
1908 gtkwin->drag_leave_signal = 0; | |
1909 } | |
1910 | |
1911 if (cursor == NULL) | |
1912 cursor = gdk_cursor_new(GDK_FLEUR); | |
1913 | |
1914 /* Grab the pointer */ | |
1915 gtk_grab_add(gtkwin->notebook); | |
5114
e245e686f62f
[gaim-migrate @ 5477]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5106
diff
changeset
|
1916 #ifndef _WIN32 |
e245e686f62f
[gaim-migrate @ 5477]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5106
diff
changeset
|
1917 /* Currently for win32 GTK+ (as of 2.2.1), gdk_pointer_is_grabbed will |
e245e686f62f
[gaim-migrate @ 5477]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5106
diff
changeset
|
1918 always be true after a button press. */ |
4803
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
1919 if (!gdk_pointer_is_grabbed()) |
5114
e245e686f62f
[gaim-migrate @ 5477]
Herman Bloggs <hermanator12002@yahoo.com>
parents:
5106
diff
changeset
|
1920 #endif |
4803
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
1921 gdk_pointer_grab(gtkwin->notebook->window, FALSE, |
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
1922 GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, |
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
1923 NULL, cursor, GDK_CURRENT_TIME); |
4359 | 1924 } |
1925 | |
1926 static gboolean | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1927 notebook_motion_cb(GtkWidget *widget, GdkEventButton *e, GaimConvWindow *win) |
4359 | 1928 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1929 GaimGtkWindow *gtkwin; |
4359 | 1930 |
1931 gtkwin = GAIM_GTK_WINDOW(win); | |
1932 | |
1933 /* | |
1934 * Make sure the user moved the mouse far enough for the | |
1935 * drag to be initiated. | |
1936 */ | |
1937 if (gtkwin->in_predrag) { | |
1938 if (e->x_root < gtkwin->drag_min_x || | |
1939 e->x_root >= gtkwin->drag_max_x || | |
1940 e->y_root < gtkwin->drag_min_y || | |
1941 e->y_root >= gtkwin->drag_max_y) { | |
1942 | |
1943 gtkwin->in_predrag = FALSE; | |
1944 notebook_init_grab(gtkwin, widget); | |
1945 } | |
1946 } | |
1947 else { /* Otherwise, draw the arrows. */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1948 GaimConvWindow *dest_win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1949 GaimGtkWindow *dest_gtkwin; |
4359 | 1950 GtkNotebook *dest_notebook; |
1951 GtkWidget *tab, *last_vis_tab = NULL; | |
1952 gint nb_x, nb_y, page_num, i, last_vis_tab_loc = -1; | |
1953 gint arrow1_x, arrow1_y, arrow2_x, arrow2_y; | |
1954 gboolean horiz_tabs = FALSE, tab_found = FALSE; | |
1955 GList *l; | |
1956 | |
1957 /* Get the window that the cursor is over. */ | |
1958 dest_win = gaim_gtkwin_get_at_xy(e->x_root, e->y_root); | |
1959 | |
1960 if (dest_win == NULL) { | |
1961 dnd_hints_hide_all(); | |
1962 | |
1963 return TRUE; | |
1964 } | |
1965 | |
1966 dest_gtkwin = GAIM_GTK_WINDOW(dest_win); | |
1967 | |
1968 dest_notebook = GTK_NOTEBOOK(dest_gtkwin->notebook); | |
1969 | |
1970 gdk_window_get_origin(GTK_WIDGET(dest_notebook)->window, &nb_x, &nb_y); | |
1971 | |
1972 arrow1_x = arrow2_x = nb_x; | |
1973 arrow1_y = arrow2_y = nb_y; | |
1974 | |
1975 page_num = gaim_gtkconv_get_dest_tab_at_xy(dest_win, | |
1976 e->x_root, e->y_root); | |
1977 | |
1978 if (gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_TOP || | |
1979 gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_BOTTOM) { | |
1980 | |
1981 horiz_tabs = TRUE; | |
1982 } | |
1983 | |
1984 /* Find out where to put the arrows. */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1985 for (l = gaim_conv_window_get_conversations(dest_win), i = 0; |
4359 | 1986 l != NULL; |
1987 l = l->next, i++) { | |
1988 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1989 GaimConversation *conv = l->data; |
4359 | 1990 |
1991 tab = GAIM_GTK_CONVERSATION(conv)->tabby; | |
1992 | |
1993 /* | |
1994 * If this is the correct tab, record the positions | |
1995 * for the arrows. | |
1996 */ | |
1997 if (i == page_num) { | |
1998 if (horiz_tabs) { | |
1999 arrow1_x = arrow2_x = nb_x + tab->allocation.x; | |
2000 arrow1_y = nb_y + tab->allocation.y; | |
2001 arrow2_y = nb_y + tab->allocation.y + | |
2002 tab->allocation.height; | |
2003 } | |
2004 else { | |
2005 arrow1_x = nb_x + tab->allocation.x; | |
2006 arrow2_x = nb_x + tab->allocation.x + | |
2007 tab->allocation.width; | |
2008 arrow1_y = arrow2_y = nb_y + tab->allocation.y; | |
2009 } | |
2010 | |
2011 tab_found = TRUE; | |
2012 break; | |
2013 } | |
2014 else { /* Keep track of the right-most tab that we see. */ | |
2015 if (horiz_tabs && tab->allocation.x > last_vis_tab_loc) { | |
2016 last_vis_tab = tab; | |
2017 last_vis_tab_loc = tab->allocation.x; | |
2018 } | |
2019 else if (!horiz_tabs && tab->allocation.y > last_vis_tab_loc) { | |
2020 last_vis_tab = tab; | |
2021 last_vis_tab_loc = tab->allocation.y; | |
2022 } | |
2023 } | |
2024 } | |
2025 | |
2026 /* | |
2027 * If we didn't find the tab, then we'll just place the | |
2028 * arrows to the right/bottom of the last visible tab. | |
2029 */ | |
2030 if (!tab_found && last_vis_tab) { | |
2031 if (horiz_tabs) { | |
2032 arrow1_x = arrow2_x = nb_x + last_vis_tab->allocation.x + | |
2033 last_vis_tab->allocation.width; | |
2034 arrow1_y = nb_y + last_vis_tab->allocation.y; | |
2035 arrow2_y = nb_y + last_vis_tab->allocation.y + | |
2036 last_vis_tab->allocation.height; | |
2037 } | |
2038 else { | |
2039 arrow1_x = nb_x + last_vis_tab->allocation.x; | |
2040 arrow2_x = nb_x + last_vis_tab->allocation.x + | |
2041 last_vis_tab->allocation.width; | |
2042 arrow1_y = arrow2_y = nb_y + last_vis_tab->allocation.y + | |
2043 last_vis_tab->allocation.height; | |
2044 } | |
2045 } | |
2046 | |
2047 if (horiz_tabs) { | |
2048 dnd_hints_show(HINT_ARROW_DOWN, arrow1_x, arrow1_y); | |
2049 dnd_hints_show(HINT_ARROW_UP, arrow2_x, arrow2_y); | |
2050 } | |
2051 else { | |
2052 dnd_hints_show(HINT_ARROW_RIGHT, arrow1_x, arrow1_y); | |
2053 dnd_hints_show(HINT_ARROW_LEFT, arrow2_x, arrow2_y); | |
2054 } | |
2055 } | |
2056 | |
2057 return TRUE; | |
2058 } | |
2059 | |
2060 static gboolean | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2061 notebook_leave_cb(GtkWidget *widget, GdkEventCrossing *e, GaimConvWindow *win) |
4359 | 2062 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2063 GaimGtkWindow *gtkwin; |
4359 | 2064 |
2065 gtkwin = GAIM_GTK_WINDOW(win); | |
2066 | |
2067 if (gtkwin->in_drag) | |
2068 return FALSE; | |
2069 | |
2070 if (e->x_root < gtkwin->drag_min_x || | |
2071 e->x_root >= gtkwin->drag_max_x || | |
2072 e->y_root < gtkwin->drag_min_y || | |
2073 e->y_root >= gtkwin->drag_max_y) { | |
2074 | |
2075 gtkwin->in_predrag = FALSE; | |
2076 notebook_init_grab(gtkwin, widget); | |
2077 } | |
2078 | |
2079 return TRUE; | |
2080 } | |
2081 | |
2082 /* | |
2083 * THANK YOU GALEON! | |
2084 */ | |
2085 static gboolean | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2086 notebook_press_cb(GtkWidget *widget, GdkEventButton *e, GaimConvWindow *win) |
4359 | 2087 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2088 GaimGtkWindow *gtkwin; |
4359 | 2089 gint nb_x, nb_y, x_rel, y_rel; |
2090 GList *l; | |
2091 int tab_clicked; | |
2092 | |
2093 if (e->button != 1 || e->type != GDK_BUTTON_PRESS) | |
2094 return FALSE; | |
2095 | |
2096 gtkwin = GAIM_GTK_WINDOW(win); | |
2097 | |
2098 if (gtkwin->in_drag) { | |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
2099 gaim_debug(GAIM_DEBUG_WARNING, "gtkconv", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
2100 "Already in the middle of a window drag at tab_press_cb\n"); |
4803
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
2101 return TRUE; |
4359 | 2102 } |
2103 | |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
2104 /* |
4359 | 2105 * Make sure a tab was actually clicked. The arrow buttons |
2106 * mess things up. | |
2107 */ | |
2108 tab_clicked = gaim_gtkconv_get_tab_at_xy(win, e->x_root, e->y_root); | |
2109 | |
2110 if (tab_clicked == -1) | |
2111 return FALSE; | |
2112 | |
2113 /* | |
2114 * Get the relative position of the press event, with regards to | |
2115 * the position of the notebook. | |
2116 */ | |
2117 gdk_window_get_origin(gtkwin->notebook->window, &nb_x, &nb_y); | |
2118 | |
2119 x_rel = e->x_root - nb_x; | |
2120 y_rel = e->y_root - nb_y; | |
2121 | |
2122 /* Reset the min/max x/y */ | |
2123 gtkwin->drag_min_x = 0; | |
2124 gtkwin->drag_min_y = 0; | |
2125 gtkwin->drag_max_x = 0; | |
2126 gtkwin->drag_max_y = 0; | |
2127 | |
2128 /* Find out which tab was dragged. */ | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2129 for (l = gaim_conv_window_get_conversations(win); l != NULL; l = l->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2130 GaimConversation *conv = l->data; |
4359 | 2131 GtkWidget *tab = GAIM_GTK_CONVERSATION(conv)->tabby; |
2132 | |
2133 if (!GTK_WIDGET_VISIBLE(tab)) | |
2134 continue; | |
2135 | |
2136 if (tab->allocation.x > x_rel || tab->allocation.y > y_rel) | |
2137 break; | |
2138 | |
2139 /* Save the borders of the tab. */ | |
2140 gtkwin->drag_min_x = tab->allocation.x + nb_x; | |
2141 gtkwin->drag_min_y = tab->allocation.y + nb_y; | |
2142 gtkwin->drag_max_x = tab->allocation.width + gtkwin->drag_min_x; | |
2143 gtkwin->drag_max_y = tab->allocation.height + gtkwin->drag_min_y; | |
2144 } | |
2145 | |
2146 /* Make sure the click occurred in the tab. */ | |
2147 if (e->x_root < gtkwin->drag_min_x || | |
2148 e->x_root >= gtkwin->drag_max_x || | |
2149 e->y_root < gtkwin->drag_min_y || | |
2150 e->y_root >= gtkwin->drag_max_y) { | |
2151 | |
2152 return FALSE; | |
2153 } | |
2154 | |
2155 gtkwin->in_predrag = TRUE; | |
2156 | |
2157 /* Connect the new motion signals. */ | |
2158 gtkwin->drag_motion_signal = | |
2159 g_signal_connect(G_OBJECT(widget), "motion_notify_event", | |
2160 G_CALLBACK(notebook_motion_cb), win); | |
2161 | |
2162 gtkwin->drag_leave_signal = | |
2163 g_signal_connect(G_OBJECT(widget), "leave_notify_event", | |
2164 G_CALLBACK(notebook_leave_cb), win); | |
2165 | |
2166 return FALSE; | |
2167 } | |
2168 | |
2169 static gboolean | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2170 notebook_release_cb(GtkWidget *widget, GdkEventButton *e, GaimConvWindow *win) |
4359 | 2171 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2172 GaimConvWindow *dest_win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2173 GaimGtkWindow *gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2174 GaimGtkWindow *dest_gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2175 GaimConversation *conv; |
4359 | 2176 GtkNotebook *dest_notebook; |
2177 gint dest_page_num; | |
2178 | |
2179 /* | |
2180 * Don't check to make sure that the event's window matches the | |
2181 * widget's, because we may be getting an event passed on from the | |
2182 * close button. | |
2183 */ | |
2184 if (e->button != 1 && e->type != GDK_BUTTON_RELEASE) | |
2185 return FALSE; | |
2186 | |
2187 if (gdk_pointer_is_grabbed()) { | |
2188 gdk_pointer_ungrab(GDK_CURRENT_TIME); | |
2189 gtk_grab_remove(widget); | |
2190 } | |
2191 | |
2192 gtkwin = GAIM_GTK_WINDOW(win); | |
2193 | |
4803
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
2194 if (!gtkwin->in_predrag && !gtkwin->in_drag) |
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
2195 return FALSE; |
4359 | 2196 |
2197 /* Disconnect the motion signal. */ | |
2198 if (gtkwin->drag_motion_signal) { | |
2199 g_signal_handler_disconnect(G_OBJECT(widget), | |
2200 gtkwin->drag_motion_signal); | |
2201 | |
2202 gtkwin->drag_motion_signal = 0; | |
2203 } | |
2204 | |
2205 /* | |
2206 * If we're in a pre-drag, we'll also need to disconnect the leave | |
2207 * signal. | |
2208 */ | |
2209 if (gtkwin->in_predrag) { | |
2210 gtkwin->in_predrag = FALSE; | |
2211 | |
2212 if (gtkwin->drag_leave_signal) { | |
2213 g_signal_handler_disconnect(G_OBJECT(widget), | |
2214 gtkwin->drag_leave_signal); | |
2215 | |
2216 gtkwin->drag_leave_signal = 0; | |
2217 } | |
2218 } | |
2219 | |
2220 /* If we're not in drag... */ | |
2221 /* We're perfectly normal people! */ | |
4803
6f04901ef729
[gaim-migrate @ 5123]
Christian Hammond <chipx86@chipx86.com>
parents:
4793
diff
changeset
|
2222 if (!gtkwin->in_drag) |
4359 | 2223 return FALSE; |
2224 | |
2225 gtkwin->in_drag = FALSE; | |
2226 | |
2227 dnd_hints_hide_all(); | |
2228 | |
4369
7e1fb422e5fd
[gaim-migrate @ 4635]
Christian Hammond <chipx86@chipx86.com>
parents:
4368
diff
changeset
|
2229 dest_win = gaim_gtkwin_get_at_xy(e->x_root, e->y_root); |
4359 | 2230 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2231 conv = gaim_conv_window_get_active_conversation(win); |
4359 | 2232 |
2233 if (dest_win == NULL) { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2234 if (gaim_conv_window_get_conversation_count(win) < 2) |
4359 | 2235 return FALSE; |
2236 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2237 if (gaim_conv_window_get_conversation_count(win) > 1) { |
4359 | 2238 /* Make a new window to stick this to. */ |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2239 GaimGtkConversation *gtkconv; |
4748
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2240 gint win_width, win_height; |
5121 | 2241 |
2242 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
4359 | 2243 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2244 dest_win = gaim_conv_window_new(); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2245 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2246 gaim_conv_window_add_conversation(dest_win, |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2247 gaim_conv_window_remove_conversation(win, |
5139
d0182ae31ab8
[gaim-migrate @ 5503]
Christian Hammond <chipx86@chipx86.com>
parents:
5133
diff
changeset
|
2248 gaim_conversation_get_index(conv))); |
5121 | 2249 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2250 dest_gtkwin = GAIM_GTK_WINDOW(dest_win); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2251 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2252 gtk_window_get_size(GTK_WINDOW(dest_gtkwin->window), |
4748
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2253 &win_width, &win_height); |
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2254 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2255 gtk_window_move(GTK_WINDOW(dest_gtkwin->window), |
4748
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2256 e->x_root - (win_width / 2), |
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2257 e->y_root - (win_height / 2)); |
d3c09ddfd3aa
[gaim-migrate @ 5063]
Christian Hammond <chipx86@chipx86.com>
parents:
4736
diff
changeset
|
2258 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2259 gaim_conv_window_show(dest_win); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2260 } |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2261 } else { |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2262 dest_gtkwin = GAIM_GTK_WINDOW(dest_win); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2263 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2264 /* Get the destination notebook. */ |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2265 dest_notebook = GTK_NOTEBOOK(gtkwin->notebook); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2266 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2267 /* Get the destination page number. */ |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2268 dest_page_num = gaim_gtkconv_get_dest_tab_at_xy(dest_win, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2269 e->x_root, e->y_root); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2270 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2271 if (win == dest_win) { |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2272 gaim_conv_window_move_conversation(win, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2273 gaim_conversation_get_index(conv), dest_page_num); |
4359 | 2274 } |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2275 else { |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2276 size_t pos; |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2277 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2278 gaim_conv_window_remove_conversation(win, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2279 gaim_conversation_get_index(conv)); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2280 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2281 pos = gaim_conv_window_add_conversation(dest_win, conv); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2282 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2283 if (pos != dest_page_num) |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2284 gaim_conv_window_move_conversation(dest_win, pos, dest_page_num); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2285 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2286 gaim_conv_window_switch_conversation(dest_win, dest_page_num); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2287 } |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2288 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2289 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); |
4359 | 2290 } |
2291 | |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2292 gaim_signal_emit(gaim_gtk_conversations_get_handle(), "conversation-drag-ended", |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
2293 win, dest_win); |
4359 | 2294 |
2295 return TRUE; | |
2296 } | |
2297 | |
8189 | 2298 /************************************************************************** |
2299 * A bunch of buddy icon functions | |
2300 **************************************************************************/ | |
2301 static GdkPixbuf * | |
8755
d0364feabf96
[gaim-migrate @ 9510]
Christian Hammond <chipx86@chipx86.com>
parents:
8748
diff
changeset
|
2302 get_tab_icon(GaimConversation *conv, gboolean small_icon) |
7143 | 2303 { |
10116 | 2304 GaimAccount *account = NULL; |
2305 const char *name = NULL; | |
7143 | 2306 GdkPixbuf *status = NULL; |
2307 | |
10116 | 2308 g_return_val_if_fail(conv != NULL, NULL); |
2309 | |
2310 account = gaim_conversation_get_account(conv); | |
2311 name = gaim_conversation_get_name(conv); | |
2312 | |
2313 g_return_val_if_fail(account != NULL, NULL); | |
2314 g_return_val_if_fail(name != NULL, NULL); | |
2315 | |
7143 | 2316 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
2317 GaimBuddy *b = gaim_find_buddy(account, name); | |
2318 if (b != NULL) { | |
2319 status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)b, | |
8755
d0364feabf96
[gaim-migrate @ 9510]
Christian Hammond <chipx86@chipx86.com>
parents:
8748
diff
changeset
|
2320 (small_icon ? GAIM_STATUS_ICON_SMALL : GAIM_STATUS_ICON_LARGE)); |
7143 | 2321 } |
2322 } | |
2323 | |
2324 if (!status) { | |
2325 GdkPixbuf *pixbuf; | |
2326 pixbuf = create_prpl_icon(account); | |
2327 | |
8755
d0364feabf96
[gaim-migrate @ 9510]
Christian Hammond <chipx86@chipx86.com>
parents:
8748
diff
changeset
|
2328 if (small_icon && pixbuf != NULL) |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2329 { |
7143 | 2330 status = gdk_pixbuf_scale_simple(pixbuf, 15, 15, |
2331 GDK_INTERP_BILINEAR); | |
2332 g_object_unref(pixbuf); | |
2333 } | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2334 else |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2335 status = pixbuf; |
7143 | 2336 } |
2337 return status; | |
2338 } | |
2339 | |
8189 | 2340 static void |
2341 update_tab_icon(GaimConversation *conv) | |
2342 { | |
2343 GaimGtkConversation *gtkconv; | |
2344 GaimConvWindow *win = gaim_conversation_get_window(conv); | |
2345 GaimAccount *account; | |
2346 const char *name; | |
2347 GdkPixbuf *status = NULL; | |
2348 | |
10116 | 2349 g_return_if_fail(conv != NULL); |
2350 | |
8189 | 2351 gtkconv = GAIM_GTK_CONVERSATION(conv); |
2352 name = gaim_conversation_get_name(conv); | |
2353 account = gaim_conversation_get_account(conv); | |
2354 | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2355 status = get_tab_icon(conv, TRUE); |
8189 | 2356 |
10116 | 2357 g_return_if_fail(status != NULL); |
2358 | |
8189 | 2359 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); |
2360 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); | |
2361 | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2362 if (status != NULL) |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2363 g_object_unref(status); |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2364 |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2365 if (gaim_conv_window_get_active_conversation(win) == conv && |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2366 gtkconv->u.im->anim == NULL) |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2367 { |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2368 status = get_tab_icon(conv, FALSE); |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2369 |
8189 | 2370 gtk_window_set_icon(GTK_WINDOW(GAIM_GTK_WINDOW(win)->window), status); |
2371 | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2372 if (status != NULL) |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2373 g_object_unref(status); |
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2374 } |
8189 | 2375 } |
2376 | |
9318 | 2377 static void |
2378 get_icon_scale_size(GdkPixbufAnimation *icon, GaimBuddyIconSpec *spec, int *width, int *height) | |
2379 { | |
2380 *width = gdk_pixbuf_animation_get_width(icon); | |
2381 *height = gdk_pixbuf_animation_get_height(icon); | |
2382 | |
2383 /* this should eventually get smarter about preserving the aspect | |
2384 * ratio when scaling, but gimmie a break, I just woke up */ | |
2385 if(spec && spec->scale_rules & GAIM_ICON_SCALE_DISPLAY) { | |
2386 if(*width < spec->min_width) | |
2387 *width = spec->min_width; | |
2388 else if(*width > spec->max_width) | |
2389 *width = spec->max_width; | |
2390 | |
2391 if(*height < spec->min_height) | |
2392 *height = spec->min_height; | |
9319 | 2393 else if(*height > spec->max_height) |
9318 | 2394 *height = spec->max_height; |
2395 } | |
2396 | |
2397 /* and now for some arbitrary sanity checks */ | |
2398 if(*width > 100) | |
2399 *width = 100; | |
2400 if(*height > 100) | |
2401 *height = 100; | |
2402 } | |
2403 | |
8189 | 2404 static gboolean |
2405 redraw_icon(gpointer data) | |
2406 { | |
2407 GaimConversation *conv = (GaimConversation *)data; | |
2408 GaimGtkConversation *gtkconv; | |
9318 | 2409 GaimAccount *account; |
2410 GaimPluginProtocolInfo *prpl_info = NULL; | |
8189 | 2411 |
2412 GdkPixbuf *buf; | |
2413 GdkPixbuf *scale; | |
2414 GdkPixmap *pm; | |
2415 GdkBitmap *bm; | |
2416 gint delay; | |
9318 | 2417 int scale_width, scale_height; |
8189 | 2418 |
2419 if (!g_list_find(gaim_get_ims(), conv)) { | |
2420 gaim_debug(GAIM_DEBUG_WARNING, "gtkconv", | |
2421 "Conversation not found in redraw_icon. I think this " | |
2422 "is a bug.\n"); | |
2423 return FALSE; | |
2424 } | |
2425 | |
2426 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
9318 | 2427 account = gaim_conversation_get_account(conv); |
2428 if(account && account->gc) | |
2429 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
8189 | 2430 |
2431 gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); | |
2432 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); | |
2433 | |
9318 | 2434 get_icon_scale_size(gtkconv->u.im->anim, prpl_info ? &prpl_info->icon_spec : |
2435 NULL, &scale_width, &scale_height); | |
2436 | |
2437 /* this code is ugly, and scares me */ | |
8189 | 2438 scale = gdk_pixbuf_scale_simple(buf, |
9318 | 2439 MAX(gdk_pixbuf_get_width(buf) * scale_width / |
8189 | 2440 gdk_pixbuf_animation_get_width(gtkconv->u.im->anim), 1), |
9318 | 2441 MAX(gdk_pixbuf_get_height(buf) * scale_height / |
8189 | 2442 gdk_pixbuf_animation_get_height(gtkconv->u.im->anim), 1), |
2443 GDK_INTERP_NEAREST); | |
2444 | |
2445 gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); | |
2446 g_object_unref(G_OBJECT(scale)); | |
2447 gtk_image_set_from_pixmap(GTK_IMAGE(gtkconv->u.im->icon), pm, bm); | |
2448 g_object_unref(G_OBJECT(pm)); | |
2449 gtk_widget_queue_draw(gtkconv->u.im->icon); | |
2450 | |
2451 if (bm) | |
2452 g_object_unref(G_OBJECT(bm)); | |
2453 | |
9131 | 2454 delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter); |
2455 if (delay <= 0) | |
2456 delay = 100; | |
2457 | |
2458 gtkconv->u.im->icon_timer = g_timeout_add(delay, redraw_icon, conv); | |
8189 | 2459 |
2460 return FALSE; | |
2461 } | |
2462 | |
2463 static void | |
2464 start_anim(GtkObject *obj, GaimConversation *conv) | |
2465 { | |
2466 GaimGtkConversation *gtkconv; | |
2467 int delay; | |
2468 | |
2469 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
2470 return; | |
2471 | |
2472 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
2473 | |
8228 | 2474 if (gtkconv->u.im->anim == NULL) |
2475 return; | |
2476 | |
8202 | 2477 if (gtkconv->u.im->icon_timer != 0) |
2478 return; | |
2479 | |
8189 | 2480 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) |
2481 return; | |
2482 | |
2483 delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter) / 10; | |
2484 | |
8758 | 2485 gtkconv->u.im->icon_timer = g_timeout_add(delay * 10, redraw_icon, conv); |
8189 | 2486 } |
2487 | |
2488 static void | |
2489 stop_anim(GtkObject *obj, GaimConversation *conv) | |
2490 { | |
2491 GaimGtkConversation *gtkconv; | |
2492 | |
2493 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
2494 return; | |
2495 | |
2496 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
2497 | |
2498 if (gtkconv->u.im->icon_timer != 0) | |
2499 g_source_remove(gtkconv->u.im->icon_timer); | |
2500 | |
2501 gtkconv->u.im->icon_timer = 0; | |
2502 } | |
2503 | |
2504 static void | |
2505 toggle_icon_animate_cb(GtkWidget *w, GaimConversation *conv) | |
2506 { | |
2507 GaimGtkConversation *gtkconv; | |
2508 | |
2509 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
2510 return; | |
2511 | |
2512 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
2513 | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2514 gtkconv->u.im->animate = |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2515 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); |
8189 | 2516 |
2517 if (gtkconv->u.im->animate) | |
2518 start_anim(NULL, conv); | |
2519 else | |
2520 stop_anim(NULL, conv); | |
2521 } | |
9845 | 2522 |
8189 | 2523 static void |
2524 remove_icon(GaimGtkConversation *gtkconv) | |
2525 { | |
2526 g_return_if_fail(gtkconv != NULL); | |
2527 | |
9887 | 2528 if (gtkconv->u.im->icon_container != NULL) |
2529 gtk_widget_destroy(gtkconv->u.im->icon_container); | |
8189 | 2530 |
2531 if (gtkconv->u.im->anim != NULL) | |
2532 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); | |
2533 | |
2534 if (gtkconv->u.im->icon_timer != 0) | |
2535 g_source_remove(gtkconv->u.im->icon_timer); | |
2536 | |
2537 if (gtkconv->u.im->iter != NULL) | |
2538 g_object_unref(G_OBJECT(gtkconv->u.im->iter)); | |
2539 | |
2540 gtkconv->u.im->icon_timer = 0; | |
2541 gtkconv->u.im->icon = NULL; | |
2542 gtkconv->u.im->anim = NULL; | |
2543 gtkconv->u.im->iter = NULL; | |
9687 | 2544 gtkconv->u.im->show_icon = FALSE; |
8189 | 2545 } |
2546 | |
9497 | 2547 static void |
9504 | 2548 saveicon_writefile_cb(void *user_data, const char *filename) |
9497 | 2549 { |
9504 | 2550 GaimConversation *conv = (GaimConversation *)user_data; |
9497 | 2551 FILE *fp; |
2552 GaimBuddyIcon *icon; | |
2553 const void *data; | |
2554 size_t len; | |
2555 | |
2556 if ((fp = fopen(filename, "wb")) == NULL) { | |
9504 | 2557 gaim_notify_error(conv, NULL, _("Unable to open file."), NULL); |
9497 | 2558 return; |
2559 } | |
2560 | |
2561 icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); | |
2562 data = gaim_buddy_icon_get_data(icon, &len); | |
2563 | |
2564 if ((len <= 0) || (data == NULL)) { | |
9504 | 2565 gaim_notify_error(conv, NULL, _("Unable to save icon file to disk."), NULL); |
9497 | 2566 return; |
2567 } | |
2568 | |
2569 fwrite(data, 1, len, fp); | |
2570 fclose(fp); | |
2571 } | |
2572 | |
2573 static void | |
2574 icon_menu_save_cb(GtkWidget *widget, GaimConversation *conv) | |
2575 { | |
2576 gchar *buf; | |
2577 | |
2578 g_return_if_fail(conv != NULL); | |
9504 | 2579 |
9706 | 2580 /* |
2581 * XXX - The file extension needs to be set to something that doesn't suck... | |
2582 * Maybe do what gtkimhtml.c does when saving an image? | |
2583 */ | |
9497 | 2584 buf = g_strdup_printf("%s.icon", gaim_normalize(conv->account, conv->name)); |
9504 | 2585 |
2586 gaim_request_file(conv, _("Save Icon"), buf, TRUE, | |
2587 G_CALLBACK(saveicon_writefile_cb), NULL, conv); | |
9497 | 2588 |
2589 g_free(buf); | |
2590 } | |
2591 | |
8189 | 2592 static gboolean |
2593 icon_menu(GtkObject *obj, GdkEventButton *e, GaimConversation *conv) | |
2594 { | |
2595 GaimGtkConversation *gtkconv; | |
2596 static GtkWidget *menu = NULL; | |
2597 GtkWidget *button; | |
2598 | |
2599 if (e->button != 3 || e->type != GDK_BUTTON_PRESS) | |
2600 return FALSE; | |
2601 | |
2602 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
2603 | |
2604 /* | |
2605 * If a menu already exists, destroy it before creating a new one, | |
2606 * thus freeing-up the memory it occupied. | |
2607 */ | |
2608 if (menu != NULL) | |
2609 gtk_widget_destroy(menu); | |
2610 | |
2611 menu = gtk_menu_new(); | |
2612 | |
2613 if (gtkconv->u.im->anim && | |
2614 !(gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim))) | |
2615 { | |
2616 gaim_new_check_item(menu, _("Animate"), | |
2617 G_CALLBACK(toggle_icon_animate_cb), conv, | |
2618 gtkconv->u.im->icon_timer); | |
2619 } | |
2620 | |
2621 button = gtk_menu_item_new_with_label(_("Hide Icon")); | |
2622 g_signal_connect_swapped(G_OBJECT(button), "activate", | |
2623 G_CALLBACK(remove_icon), gtkconv); | |
2624 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); | |
2625 gtk_widget_show(button); | |
2626 | |
2627 gaim_new_item_from_stock(menu, _("Save Icon As..."), GTK_STOCK_SAVE_AS, | |
9497 | 2628 G_CALLBACK(icon_menu_save_cb), conv, |
8189 | 2629 0, 0, NULL); |
2630 | |
2631 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); | |
2632 | |
2633 return TRUE; | |
2634 } | |
2635 /************************************************************************** | |
2636 * End of the bunch of buddy icon functions | |
2637 **************************************************************************/ | |
2638 | |
7887 | 2639 /* |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2640 * Makes sure all the menu items and all the buttons are hidden/shown and |
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8730
diff
changeset
|
2641 * sensitive/insensitive. This is called after changing tabs and when an |
7887 | 2642 * account signs on or off. |
2643 */ | |
4359 | 2644 static void |
7887 | 2645 gray_stuff_out(GaimConversation *conv) |
4359 | 2646 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2647 GaimConvWindow *win; |
7887 | 2648 GaimGtkWindow *gtkwin; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2649 GaimGtkConversation *gtkconv; |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
2650 GaimConnection *gc; |
7887 | 2651 GaimPluginProtocolInfo *prpl_info = NULL; |
7222 | 2652 GdkPixbuf *window_icon = NULL; |
8439 | 2653 GtkIMHtmlButtons buttons; |
9812 | 2654 GaimAccount *account; |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2655 |
7887 | 2656 win = gaim_conversation_get_window(conv); |
4359 | 2657 gtkwin = GAIM_GTK_WINDOW(win); |
2658 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
7887 | 2659 gc = gaim_conversation_get_gc(conv); |
9909 | 2660 account = gaim_conversation_get_account(conv); |
8439 | 2661 |
7879 | 2662 if (gc != NULL) |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
2663 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
4364
fa56829b9587
[gaim-migrate @ 4630]
Christian Hammond <chipx86@chipx86.com>
parents:
4363
diff
changeset
|
2664 |
7887 | 2665 if (gtkwin->menu.send_as != NULL) |
2666 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); | |
2667 | |
2668 /* | |
2669 * Handle hiding and showing stuff based on what type of conv this is. | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2670 * Stuff that Gaim IMs support in general should be shown for IM |
8735
92cbf9713795
[gaim-migrate @ 9490]
Christian Hammond <chipx86@chipx86.com>
parents:
8730
diff
changeset
|
2671 * conversations. Stuff that Gaim chats support in general should be |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2672 * shown for chat conversations. It doesn't matter whether the PRPL |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2673 * supports it or not--that only affects if the button or menu item |
7929 | 2674 * is sensitive or not. |
7887 | 2675 */ |
4359 | 2676 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
7887 | 2677 /* Show stuff that applies to IMs, hide stuff that applies to chats */ |
2678 | |
2679 /* Deal with buttons */ | |
2680 gtk_widget_show(gtkconv->info); | |
2681 gtk_widget_show(gtkconv->send); | |
2682 gtk_widget_show(gtkconv->u.im->block); | |
9468 | 2683 gtk_widget_show(gtkconv->u.im->send_file); |
7887 | 2684 |
2685 /* Deal with menu items */ | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2686 gtk_widget_show(gtkwin->menu.view_log); |
9468 | 2687 gtk_widget_show(gtkwin->menu.send_file); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2688 gtk_widget_show(gtkwin->menu.add_pounce); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2689 gtk_widget_show(gtkwin->menu.get_info); |
7887 | 2690 gtk_widget_show(gtkwin->menu.warn); |
7859 | 2691 gtk_widget_hide(gtkwin->menu.invite); |
7887 | 2692 gtk_widget_show(gtkwin->menu.alias); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2693 gtk_widget_show(gtkwin->menu.block); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2694 |
9812 | 2695 if (gaim_find_buddy(account, gaim_conversation_get_name(conv)) == NULL) { |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2696 gtk_widget_show(gtkwin->menu.add); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2697 gtk_widget_hide(gtkwin->menu.remove); |
7929 | 2698 gtk_widget_show(gtkconv->add); |
2699 gtk_widget_hide(gtkconv->remove); | |
7859 | 2700 } else { |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2701 gtk_widget_show(gtkwin->menu.remove); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2702 gtk_widget_hide(gtkwin->menu.add); |
7929 | 2703 gtk_widget_hide(gtkconv->add); |
2704 gtk_widget_show(gtkconv->remove); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2705 } |
7887 | 2706 |
2707 gtk_widget_show(gtkwin->menu.insert_link); | |
9287 | 2708 gtk_widget_show(gtkwin->menu.insert_image); |
7887 | 2709 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { |
9470 | 2710 /* Show stuff that applies to Chats, hide stuff that applies to IMs */ |
7887 | 2711 |
2712 /* Deal with buttons */ | |
7952 | 2713 gtk_widget_show(gtkconv->info); |
7887 | 2714 gtk_widget_show(gtkconv->send); |
2715 gtk_widget_show(gtkconv->u.chat->invite); | |
2716 | |
2717 /* Deal with menu items */ | |
9917 | 2718 gtk_widget_show(gtkwin->menu.view_log); |
9468 | 2719 gtk_widget_hide(gtkwin->menu.send_file); |
7859 | 2720 gtk_widget_hide(gtkwin->menu.add_pounce); |
2721 gtk_widget_hide(gtkwin->menu.get_info); | |
7887 | 2722 gtk_widget_hide(gtkwin->menu.warn); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2723 gtk_widget_show(gtkwin->menu.invite); |
7887 | 2724 gtk_widget_show(gtkwin->menu.alias); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2725 gtk_widget_hide(gtkwin->menu.block); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2726 |
9812 | 2727 if (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) == NULL) { |
2728 /* If the chat is NOT in the buddy list */ | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2729 gtk_widget_show(gtkwin->menu.add); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2730 gtk_widget_hide(gtkwin->menu.remove); |
7929 | 2731 gtk_widget_show(gtkconv->add); |
2732 gtk_widget_hide(gtkconv->remove); | |
7859 | 2733 } else { |
9812 | 2734 /* If the chat IS in the buddy list */ |
2735 gtk_widget_hide(gtkwin->menu.add); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2736 gtk_widget_show(gtkwin->menu.remove); |
7929 | 2737 gtk_widget_hide(gtkconv->add); |
2738 gtk_widget_show(gtkconv->remove); | |
7887 | 2739 } |
2740 | |
2741 gtk_widget_show(gtkwin->menu.insert_link); | |
2742 gtk_widget_hide(gtkwin->menu.insert_image); | |
2743 } | |
2744 | |
2745 /* | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2746 * Handle graying stuff out based on whether an account is connected |
7887 | 2747 * and what features that account supports. |
2748 */ | |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
2749 if ((gc != NULL) && |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
2750 ( (gaim_conversation_get_type(conv) != GAIM_CONV_CHAT) || |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
2751 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) { |
7887 | 2752 /* Account is online */ |
2753 | |
2754 /* Deal with buttons */ | |
2755 gtk_widget_set_sensitive(gtkconv->info, (prpl_info->get_info != NULL)); | |
7929 | 2756 |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2757 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2758 { |
9812 | 2759 gtk_widget_set_sensitive(gtkconv->add, (prpl_info->add_buddy != NULL)); |
2760 gtk_widget_set_sensitive(gtkconv->remove, (prpl_info->remove_buddy != NULL)); | |
2761 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->send_im != NULL)); | |
2762 gtk_widget_set_sensitive(gtkconv->u.im->block, (prpl_info->add_deny != NULL)); | |
9468 | 2763 gtk_widget_set_sensitive(gtkconv->u.im->send_file, |
9812 | 2764 (prpl_info->send_file && (!prpl_info->can_receive_file || |
2765 prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv))))); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2766 } |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2767 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2768 { |
9812 | 2769 /* Only allow adding/removing if this is a chat and not a conference */ |
2770 gtk_widget_set_sensitive(gtkconv->add, (prpl_info->join_chat != NULL)); | |
2771 gtk_widget_set_sensitive(gtkconv->remove, (prpl_info->join_chat != NULL)); | |
2772 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->chat_send != NULL)); | |
2773 gtk_widget_set_sensitive(gtkconv->u.chat->invite, (prpl_info->chat_invite != NULL)); | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
2774 } |
7887 | 2775 |
2776 /* Deal with the toolbar */ | |
8420 | 2777 if (gc->flags & GAIM_CONNECTION_HTML) { |
8677 | 2778 buttons = GTK_IMHTML_ALL; /* Everything on */ |
8420 | 2779 if (!(prpl_info->options & OPT_PROTO_IM_IMAGE)) |
8422 | 2780 buttons &= ~GTK_IMHTML_IMAGE; |
8420 | 2781 if (gc->flags & GAIM_CONNECTION_NO_BGCOLOR) |
8422 | 2782 buttons &= ~GTK_IMHTML_BACKCOLOR; |
8691
0eb5161ef333
[gaim-migrate @ 9444]
Christian Hammond <chipx86@chipx86.com>
parents:
8690
diff
changeset
|
2783 if (gc->flags & GAIM_CONNECTION_NO_FONTSIZE) { |
0eb5161ef333
[gaim-migrate @ 9444]
Christian Hammond <chipx86@chipx86.com>
parents:
8690
diff
changeset
|
2784 buttons &= ~GTK_IMHTML_GROW; |
0eb5161ef333
[gaim-migrate @ 9444]
Christian Hammond <chipx86@chipx86.com>
parents:
8690
diff
changeset
|
2785 buttons &= ~GTK_IMHTML_SHRINK; |
0eb5161ef333
[gaim-migrate @ 9444]
Christian Hammond <chipx86@chipx86.com>
parents:
8690
diff
changeset
|
2786 } |
9041 | 2787 if (gc->flags & GAIM_CONNECTION_NO_URLDESC) |
2788 buttons &= ~GTK_IMHTML_LINKDESC; | |
8420 | 2789 } else { |
8422 | 2790 buttons = GTK_IMHTML_SMILEY; |
8420 | 2791 } |
2792 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); | |
9812 | 2793 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gaim_account_get_protocol_id(account)); |
8422 | 2794 |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
2795 /* Deal with menu items */ |
7887 | 2796 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); |
2797 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); | |
2798 gtk_widget_set_sensitive(gtkwin->menu.get_info, (prpl_info->get_info != NULL)); | |
2799 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL)); | |
9812 | 2800 gtk_widget_set_sensitive(gtkwin->menu.invite, (prpl_info->chat_invite != NULL)); |
2801 gtk_widget_set_sensitive(gtkwin->menu.block, (prpl_info->add_deny != NULL)); | |
2802 gtk_widget_set_sensitive(gtkwin->menu.insert_link, (gc->flags & GAIM_CONNECTION_HTML)); | |
2803 gtk_widget_set_sensitive(gtkwin->menu.insert_image, (prpl_info->options & OPT_PROTO_IM_IMAGE)); | |
8319
a2c5537a814b
[gaim-migrate @ 9043]
Christian Hammond <chipx86@chipx86.com>
parents:
8317
diff
changeset
|
2804 |
7887 | 2805 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
9812 | 2806 gtk_widget_set_sensitive(gtkwin->menu.add, (prpl_info->add_buddy != NULL)); |
2807 gtk_widget_set_sensitive(gtkwin->menu.remove, (prpl_info->remove_buddy != NULL)); | |
9468 | 2808 gtk_widget_set_sensitive(gtkwin->menu.send_file, |
9812 | 2809 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file || |
2810 prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv))))); | |
2811 gtk_widget_set_sensitive(gtkwin->menu.alias, | |
2812 (gaim_find_buddy(account, gaim_conversation_get_name(conv)) != NULL)); | |
7887 | 2813 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { |
9812 | 2814 gtk_widget_set_sensitive(gtkwin->menu.add, (prpl_info->join_chat != NULL)); |
2815 gtk_widget_set_sensitive(gtkwin->menu.remove, (prpl_info->join_chat != NULL)); | |
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
2816 gtk_widget_set_sensitive(gtkwin->menu.alias, |
9812 | 2817 (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) != NULL)); |
7887 | 2818 } |
2819 } else { | |
2820 /* Account is offline */ | |
9812 | 2821 /* Or it's a chat that we've left. */ |
7887 | 2822 |
2823 /* Deal with buttons */ | |
7929 | 2824 gtk_widget_set_sensitive(gtkconv->add, FALSE); |
2825 gtk_widget_set_sensitive(gtkconv->remove, FALSE); | |
7887 | 2826 gtk_widget_set_sensitive(gtkconv->info, FALSE); |
2827 gtk_widget_set_sensitive(gtkconv->send, FALSE); | |
2828 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { | |
2829 gtk_widget_set_sensitive(gtkconv->u.im->block, FALSE); | |
9468 | 2830 gtk_widget_set_sensitive(gtkconv->u.im->send_file, FALSE); |
7887 | 2831 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { |
2832 gtk_widget_set_sensitive(gtkconv->u.chat->invite, FALSE); | |
2833 } | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2834 |
7887 | 2835 /* Then deal with menu items */ |
2836 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); | |
9468 | 2837 gtk_widget_set_sensitive(gtkwin->menu.send_file, FALSE); |
7887 | 2838 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); |
2839 gtk_widget_set_sensitive(gtkwin->menu.get_info, FALSE); | |
2840 gtk_widget_set_sensitive(gtkwin->menu.warn, FALSE); | |
2841 gtk_widget_set_sensitive(gtkwin->menu.invite, FALSE); | |
2842 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); | |
2843 gtk_widget_set_sensitive(gtkwin->menu.block, FALSE); | |
2844 gtk_widget_set_sensitive(gtkwin->menu.add, FALSE); | |
2845 gtk_widget_set_sensitive(gtkwin->menu.remove, FALSE); | |
7929 | 2846 gtk_widget_set_sensitive(gtkwin->menu.insert_link, TRUE); |
7887 | 2847 gtk_widget_set_sensitive(gtkwin->menu.insert_image, FALSE); |
2848 } | |
2849 | |
2850 /* | |
2851 * Update the window's icon | |
2852 */ | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2853 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) && |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2854 (gtkconv->u.im->anim)) |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2855 { |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2856 window_icon = |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2857 gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); |
7887 | 2858 g_object_ref(window_icon); |
2859 } else { | |
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2860 window_icon = get_tab_icon(conv, FALSE); |
4359 | 2861 } |
7887 | 2862 gtk_window_set_icon(GTK_WINDOW(gtkwin->window), window_icon); |
2863 g_object_unref(G_OBJECT(window_icon)); | |
2864 } | |
2865 | |
2866 static void | |
8189 | 2867 before_switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, |
2868 gpointer user_data) | |
2869 { | |
2870 GaimConvWindow *win; | |
2871 GaimConversation *conv; | |
2872 GaimGtkConversation *gtkconv; | |
2873 | |
2874 win = (GaimConvWindow *)user_data; | |
2875 conv = gaim_conv_window_get_active_conversation(win); | |
2876 | |
2877 g_return_if_fail(conv != NULL); | |
2878 | |
8192 | 2879 if (gaim_conversation_get_type(conv) != GAIM_CONV_IM) |
2880 return; | |
2881 | |
8189 | 2882 gtkconv = GAIM_GTK_CONVERSATION(conv); |
2883 | |
2884 stop_anim(NULL, conv); | |
2885 } | |
2886 | |
2887 static void | |
7887 | 2888 switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, |
2889 gpointer user_data) | |
2890 { | |
2891 GaimConvWindow *win; | |
2892 GaimConversation *conv; | |
2893 GaimGtkConversation *gtkconv; | |
2894 GaimGtkWindow *gtkwin; | |
2895 | |
2896 win = (GaimConvWindow *)user_data; | |
2897 conv = gaim_conv_window_get_conversation_at(win, page_num); | |
2898 | |
2899 g_return_if_fail(conv != NULL); | |
2900 | |
2901 gtkwin = GAIM_GTK_WINDOW(win); | |
2902 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
2903 | |
2904 gaim_conversation_set_unseen(conv, GAIM_UNSEEN_NONE); | |
2905 | |
2906 /* Update the menubar */ | |
2907 gray_stuff_out(conv); | |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2908 |
4736 | 2909 update_typing_icon(conv); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2910 |
4359 | 2911 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.logging), |
7143 | 2912 gaim_conversation_is_logging(conv)); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2913 |
4359 | 2914 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.sounds), |
7143 | 2915 gtkconv->make_sound); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2916 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2917 gtk_check_menu_item_set_active( |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2918 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar), |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2919 gtkconv->show_formatting_toolbar); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
2920 |
9188 | 2921 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.show_timestamps), |
2922 gtkconv->show_timestamps); | |
2923 | |
8189 | 2924 /* |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
2925 * We pause icons when they are not visible. If this icon should |
9297 | 2926 * be animated then start it back up again. |
8189 | 2927 */ |
8192 | 2928 if ((gaim_conversation_get_type(conv) == GAIM_CONV_IM) && |
2929 (gtkconv->u.im->animate)) | |
8189 | 2930 start_anim(NULL, conv); |
2931 | |
4965 | 2932 gtk_window_set_title(GTK_WINDOW(gtkwin->window), |
7143 | 2933 gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); |
4359 | 2934 } |
2935 | |
2936 /************************************************************************** | |
2937 * Utility functions | |
2938 **************************************************************************/ | |
2939 | |
2940 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2941 got_typing_keypress(GaimConversation *conv, gboolean first) |
4359 | 2942 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2943 GaimConvIm *im; |
4685 | 2944 |
4359 | 2945 /* |
2946 * We know we got something, so we at least have to make sure we don't | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
2947 * send GAIM_TYPED any time soon. |
4359 | 2948 */ |
2949 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2950 im = GAIM_CONV_IM(conv); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2951 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2952 if (gaim_conv_im_get_type_again_timeout(im)) |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2953 gaim_conv_im_stop_type_again_timeout(im); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2954 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2955 gaim_conv_im_start_type_again_timeout(im); |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2956 |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2957 if (first || (gaim_conv_im_get_type_again(im) != 0 && |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2958 time(NULL) > gaim_conv_im_get_type_again(im))) { |
4359 | 2959 |
2960 int timeout = serv_send_typing(gaim_conversation_get_gc(conv), | |
2961 (char *)gaim_conversation_get_name(conv), | |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
2962 GAIM_TYPING); |
4359 | 2963 |
2964 if (timeout) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2965 gaim_conv_im_set_type_again(im, time(NULL) + timeout); |
4359 | 2966 else |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2967 gaim_conv_im_set_type_again(im, 0); |
4359 | 2968 } |
2969 } | |
2970 | |
4736 | 2971 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2972 update_typing_icon(GaimConversation *conv) |
4736 | 2973 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2974 GaimGtkWindow *gtkwin; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2975 GaimConvIm *im = NULL; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2976 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
4736 | 2977 |
2978 gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv)); | |
2979 | |
2980 if(gaim_conversation_get_type(conv) == GAIM_CONV_IM) | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2981 im = GAIM_CONV_IM(conv); |
4736 | 2982 |
2983 if(gtkwin->menu.typing_icon) { | |
2984 gtk_widget_destroy(gtkwin->menu.typing_icon); | |
2985 gtkwin->menu.typing_icon = NULL; | |
2986 } | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2987 if(im && gaim_conv_im_get_typing_state(im) == GAIM_TYPING) { |
4736 | 2988 gtkwin->menu.typing_icon = gtk_image_menu_item_new(); |
2989 gtk_image_menu_item_set_image( | |
2990 GTK_IMAGE_MENU_ITEM(gtkwin->menu.typing_icon), | |
2991 gtk_image_new_from_stock(GAIM_STOCK_TYPING, | |
2992 GTK_ICON_SIZE_MENU)); | |
4757 | 2993 gtk_tooltips_set_tip(gtkconv->tooltips, gtkwin->menu.typing_icon, |
4736 | 2994 _("User is typing..."), NULL); |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2995 } else if(im && gaim_conv_im_get_typing_state(im) == GAIM_TYPED) { |
4736 | 2996 gtkwin->menu.typing_icon = gtk_image_menu_item_new(); |
2997 gtk_image_menu_item_set_image( | |
2998 GTK_IMAGE_MENU_ITEM(gtkwin->menu.typing_icon), | |
2999 gtk_image_new_from_stock(GAIM_STOCK_TYPED, | |
3000 GTK_ICON_SIZE_MENU)); | |
4757 | 3001 gtk_tooltips_set_tip(gtkconv->tooltips, gtkwin->menu.typing_icon, |
4736 | 3002 _("User has typed something and paused"), NULL); |
3003 } | |
3004 | |
3005 if(gtkwin->menu.typing_icon) { | |
3006 gtk_menu_item_set_right_justified( | |
3007 GTK_MENU_ITEM(gtkwin->menu.typing_icon), TRUE); | |
3008 gtk_widget_show_all(gtkwin->menu.typing_icon); | |
3009 gtk_menu_shell_append(GTK_MENU_SHELL(gtkwin->menu.menubar), | |
3010 gtkwin->menu.typing_icon); | |
3011 } | |
3012 } | |
3013 | |
4685 | 3014 static gboolean |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3015 update_send_as_selection(GaimConvWindow *win) |
4359 | 3016 { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3017 GaimAccount *account; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3018 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3019 GaimGtkWindow *gtkwin; |
4359 | 3020 GtkWidget *menu; |
3021 GList *child; | |
3022 | |
7090
04f9f7440bc3
[gaim-migrate @ 7655]
Christian Hammond <chipx86@chipx86.com>
parents:
7089
diff
changeset
|
3023 if (g_list_find(gaim_get_windows(), win) == NULL) |
04f9f7440bc3
[gaim-migrate @ 7655]
Christian Hammond <chipx86@chipx86.com>
parents:
7089
diff
changeset
|
3024 return FALSE; |
4849 | 3025 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3026 conv = gaim_conv_window_get_active_conversation(win); |
4359 | 3027 |
5860
52d5fad43950
[gaim-migrate @ 6291]
Christian Hammond <chipx86@chipx86.com>
parents:
5858
diff
changeset
|
3028 if (conv == NULL) |
52d5fad43950
[gaim-migrate @ 6291]
Christian Hammond <chipx86@chipx86.com>
parents:
5858
diff
changeset
|
3029 return FALSE; |
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3030 |
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3031 account = gaim_conversation_get_account(conv); |
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3032 gtkwin = GAIM_GTK_WINDOW(win); |
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
3033 |
4364
fa56829b9587
[gaim-migrate @ 4630]
Christian Hammond <chipx86@chipx86.com>
parents:
4363
diff
changeset
|
3034 if (gtkwin->menu.send_as == NULL) |
4685 | 3035 return FALSE; |
4364
fa56829b9587
[gaim-migrate @ 4630]
Christian Hammond <chipx86@chipx86.com>
parents:
4363
diff
changeset
|
3036 |
4359 | 3037 gtk_widget_show(gtkwin->menu.send_as); |
3038 | |
3039 menu = gtk_menu_item_get_submenu( | |
3040 GTK_MENU_ITEM(gtkwin->menu.send_as)); | |
3041 | |
3042 for (child = gtk_container_get_children(GTK_CONTAINER(menu)); | |
3043 child != NULL; | |
3044 child = child->next) { | |
3045 | |
3046 GtkWidget *item = child->data; | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3047 GaimAccount *item_account = g_object_get_data(G_OBJECT(item), |
4673 | 3048 "gaim_account"); |
3049 | |
3050 if (account == item_account) { | |
4359 | 3051 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); |
3052 break; | |
3053 } | |
3054 } | |
6030
54c37db13279
[gaim-migrate @ 6480]
Christian Hammond <chipx86@chipx86.com>
parents:
6016
diff
changeset
|
3055 |
4685 | 3056 return FALSE; |
4359 | 3057 } |
3058 | |
3059 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3060 generate_send_as_items(GaimConvWindow *win, GaimConversation *deleted_conv) |
4359 | 3061 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3062 GaimGtkWindow *gtkwin; |
4359 | 3063 GtkWidget *menu; |
3064 GtkWidget *menuitem; | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3065 GList *gcs; |
4359 | 3066 GList *convs; |
3067 GSList *group = NULL; | |
3068 gboolean first_offline = TRUE; | |
3069 gboolean found_online = FALSE; | |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3070 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
4359 | 3071 |
3072 gtkwin = GAIM_GTK_WINDOW(win); | |
3073 | |
3074 if (gtkwin->menu.send_as != NULL) | |
3075 gtk_widget_destroy(gtkwin->menu.send_as); | |
3076 | |
3077 /* See if we have > 1 connection active. */ | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3078 if (g_list_length(gaim_connections_get_all()) < 2) { |
4359 | 3079 /* Now make sure we don't have any Offline entries. */ |
3080 gboolean found_offline = FALSE; | |
3081 | |
3082 for (convs = gaim_get_conversations(); | |
3083 convs != NULL; | |
3084 convs = convs->next) { | |
3085 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3086 GaimConversation *conv; |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3087 GaimAccount *account; |
4491 | 3088 |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3089 conv = (GaimConversation *)convs->data; |
4491 | 3090 account = gaim_conversation_get_account(conv); |
3091 | |
6495
8ce66049ce68
[gaim-migrate @ 7010]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
3092 if (account != NULL && account->gc == NULL) { |
4359 | 3093 found_offline = TRUE; |
3094 break; | |
3095 } | |
3096 } | |
3097 | |
3098 if (!found_offline) { | |
3099 gtkwin->menu.send_as = NULL; | |
3100 return; | |
3101 } | |
3102 } | |
3103 | |
3104 /* Build the Send As menu */ | |
3105 gtkwin->menu.send_as = gtk_menu_item_new_with_mnemonic(_("_Send As")); | |
3106 gtk_widget_show(gtkwin->menu.send_as); | |
3107 | |
3108 menu = gtk_menu_new(); | |
7857
43f63ff8a6d8
[gaim-migrate @ 8511]
Christian Hammond <chipx86@chipx86.com>
parents:
7855
diff
changeset
|
3109 gtk_menu_shell_insert(GTK_MENU_SHELL(gtkwin->menu.menubar), |
43f63ff8a6d8
[gaim-migrate @ 8511]
Christian Hammond <chipx86@chipx86.com>
parents:
7855
diff
changeset
|
3110 gtkwin->menu.send_as, 2); |
4359 | 3111 gtk_menu_item_set_submenu(GTK_MENU_ITEM(gtkwin->menu.send_as), menu); |
3112 | |
3113 gtk_widget_show(menu); | |
3114 | |
3115 /* Fill it with entries. */ | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3116 for (gcs = gaim_connections_get_all(); gcs != NULL; gcs = gcs->next) { |
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3117 |
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3118 GaimConnection *gc; |
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3119 GaimAccount *account; |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3120 GtkWidget *box; |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3121 GtkWidget *label; |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3122 GtkWidget *image; |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3123 GdkPixbuf *pixbuf, *scale; |
4359 | 3124 |
3125 found_online = TRUE; | |
3126 | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3127 gc = (GaimConnection *)gcs->data; |
4359 | 3128 |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3129 /* Create a pixmap for the protocol icon. */ |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3130 pixbuf = create_prpl_icon(gc->account); |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3131 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, GDK_INTERP_BILINEAR); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3132 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3133 /* Now convert it to GtkImage */ |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3134 if (pixbuf == NULL) |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3135 image = gtk_image_new(); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3136 else |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3137 image = gtk_image_new_from_pixbuf(scale); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3138 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3139 gtk_size_group_add_widget(sg, image); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3140 |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3141 g_object_unref(G_OBJECT(scale)); |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3142 g_object_unref(G_OBJECT(pixbuf)); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3143 |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3144 account = gaim_connection_get_account(gc); |
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3145 |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3146 /* Make our menu item */ |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3147 menuitem = gtk_radio_menu_item_new_with_label(group, |
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3148 gaim_account_get_username(account)); |
4793 | 3149 group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
4359 | 3150 |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3151 /* Do some evil, see some evil, speak some evil. */ |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3152 box = gtk_hbox_new(FALSE, 0); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3153 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3154 label = gtk_bin_get_child(GTK_BIN(menuitem)); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3155 g_object_ref(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3156 gtk_container_remove(GTK_CONTAINER(menuitem), label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3157 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3158 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3159 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 4); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3160 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3161 g_object_unref(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3162 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3163 gtk_container_add(GTK_CONTAINER(menuitem), box); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3164 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3165 gtk_widget_show(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3166 gtk_widget_show(image); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3167 gtk_widget_show(box); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3168 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3169 /* Set our data and callbacks. */ |
4359 | 3170 g_object_set_data(G_OBJECT(menuitem), "user_data", win); |
4673 | 3171 g_object_set_data(G_OBJECT(menuitem), "gaim_account", gc->account); |
4359 | 3172 |
4786 | 3173 g_signal_connect(G_OBJECT(menuitem), "activate", |
4673 | 3174 G_CALLBACK(menu_conv_sel_send_cb), NULL); |
4359 | 3175 |
3176 gtk_widget_show(menuitem); | |
3177 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
3178 } | |
3179 | |
3180 /* | |
3181 * Fill it with any accounts that still has an open (yet disabled) window | |
3182 * (signed off accounts with a window open). | |
3183 */ | |
3184 for (convs = gaim_get_conversations(); | |
3185 convs != NULL; | |
3186 convs = convs->next) { | |
3187 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3188 GaimConversation *conv; |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3189 GaimAccount *account; |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3190 GtkWidget *box; |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3191 GtkWidget *label; |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3192 GtkWidget *image; |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3193 GdkPixbuf *pixbuf, *scale; |
4359 | 3194 |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3195 conv = (GaimConversation *)convs->data; |
4360
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
3196 |
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
3197 if (conv == deleted_conv) |
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
3198 continue; |
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
3199 |
4491 | 3200 account = gaim_conversation_get_account(conv); |
3201 | |
6495
8ce66049ce68
[gaim-migrate @ 7010]
Christian Hammond <chipx86@chipx86.com>
parents:
6485
diff
changeset
|
3202 if (account != NULL && account->gc == NULL) { |
4359 | 3203 if (first_offline && found_online) { |
3204 menuitem = gtk_separator_menu_item_new(); | |
3205 gtk_widget_show(menuitem); | |
3206 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
3207 | |
3208 first_offline = FALSE; | |
3209 } | |
3210 | |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3211 /* Create a pixmap for the protocol icon. */ |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3212 pixbuf = create_prpl_icon(account); |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3213 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16, |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3214 GDK_INTERP_BILINEAR); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3215 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3216 /* Now convert it to GtkImage */ |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3217 if (pixbuf == NULL) |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3218 image = gtk_image_new(); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3219 else |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3220 image = gtk_image_new_from_pixbuf(scale); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3221 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3222 gtk_size_group_add_widget(sg, image); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3223 |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3224 if (scale != NULL) g_object_unref(scale); |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3225 if (pixbuf != NULL) g_object_unref(pixbuf); |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3226 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3227 /* Make our menu item */ |
4359 | 3228 menuitem = gtk_radio_menu_item_new_with_label(group, |
4491 | 3229 account->username); |
4793 | 3230 group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
4359 | 3231 |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3232 /* Do some evil, see some evil, speak some evil. */ |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3233 box = gtk_hbox_new(FALSE, 0); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3234 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3235 label = gtk_bin_get_child(GTK_BIN(menuitem)); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3236 g_object_ref(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3237 gtk_container_remove(GTK_CONTAINER(menuitem), label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3238 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3239 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3240 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 4); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3241 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3242 g_object_unref(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3243 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3244 gtk_container_add(GTK_CONTAINER(menuitem), box); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3245 |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3246 gtk_widget_show(label); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3247 gtk_widget_show(image); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3248 gtk_widget_show(box); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3249 |
4359 | 3250 gtk_widget_set_sensitive(menuitem, FALSE); |
4786 | 3251 g_object_set_data(G_OBJECT(menuitem), "user_data", win); |
4674 | 3252 g_object_set_data(G_OBJECT(menuitem), "gaim_account", account); |
4359 | 3253 |
4786 | 3254 g_signal_connect(G_OBJECT(menuitem), "activate", |
5902
6889b89cab90
[gaim-migrate @ 6334]
Christian Hammond <chipx86@chipx86.com>
parents:
5901
diff
changeset
|
3255 G_CALLBACK(menu_conv_sel_send_cb), NULL); |
4786 | 3256 |
4359 | 3257 gtk_widget_show(menuitem); |
3258 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
3259 } | |
3260 } | |
3261 | |
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3262 g_object_unref(sg); |
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3263 |
4359 | 3264 gtk_widget_show(gtkwin->menu.send_as); |
3265 update_send_as_selection(win); | |
3266 } | |
3267 | |
3268 static GList * | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3269 generate_invite_user_names(GaimConnection *gc) |
4359 | 3270 { |
6695 | 3271 GaimBlistNode *gnode,*cnode,*bnode; |
4359 | 3272 static GList *tmp = NULL; |
3273 | |
3274 if (tmp) | |
3275 g_list_free(tmp); | |
3276 | |
3277 tmp = g_list_append(NULL, ""); | |
3278 | |
3279 if (gc != NULL) { | |
4785 | 3280 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
3281 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
3282 continue; | |
6695 | 3283 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
3284 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
4785 | 3285 continue; |
6695 | 3286 for(bnode = cnode->child; bnode; bnode = bnode->next) { |
3287 GaimBuddy *buddy; | |
3288 | |
3289 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
3290 continue; | |
3291 | |
3292 buddy = (GaimBuddy *)bnode; | |
3293 | |
3294 if (buddy->account == gc->account && | |
3295 GAIM_BUDDY_IS_ONLINE(buddy)) | |
3296 tmp = g_list_append(tmp, buddy->name); | |
3297 } | |
4359 | 3298 } |
3299 } | |
3300 } | |
3301 | |
3302 return tmp; | |
3303 } | |
3304 | |
9498 | 3305 static GdkPixbuf * |
9554 | 3306 get_chat_buddy_status_icon(GaimConvChat *chat, const char *name, GaimConvChatBuddyFlags flags) |
9498 | 3307 { |
9554 | 3308 GdkPixbuf *pixbuf, *scale, *scale2; |
9498 | 3309 char *filename; |
9554 | 3310 char *image = NULL; |
3311 | |
3312 if (flags & GAIM_CBFLAGS_FOUNDER) { | |
9588 | 3313 image = g_strdup("founder.png"); |
9554 | 3314 } else if (flags & GAIM_CBFLAGS_OP) { |
9588 | 3315 image = g_strdup("op.png"); |
9554 | 3316 } else if (flags & GAIM_CBFLAGS_HALFOP) { |
9588 | 3317 image = g_strdup("halfop.png"); |
9554 | 3318 } else if (flags & GAIM_CBFLAGS_VOICE) { |
9588 | 3319 image = g_strdup("voice.png"); |
9554 | 3320 } else if ((!flags) && gaim_conv_chat_is_user_ignored(chat, name)) { |
9588 | 3321 image = g_strdup("ignored.png"); |
9554 | 3322 } |
3323 if (image) { | |
3324 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL); | |
3325 g_free(image); | |
9498 | 3326 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
3327 g_free(filename); | |
3328 if (!pixbuf) | |
3329 return NULL; | |
3330 scale = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); | |
3331 g_object_unref(pixbuf); | |
9554 | 3332 if (flags && gaim_conv_chat_is_user_ignored(chat, name)) { |
9588 | 3333 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "ignored.png", NULL); |
9554 | 3334 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
3335 g_free(filename); | |
3336 scale2 = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); | |
3337 g_object_unref(pixbuf); | |
3338 gdk_pixbuf_composite(scale2, scale, 0, 0, 15, 15, 0, 0, 1, 1, GDK_INTERP_BILINEAR, 192); | |
3339 g_object_unref(scale2); | |
3340 } | |
9498 | 3341 return scale; |
3342 } | |
3343 | |
3344 return NULL; | |
3345 } | |
3346 | |
4359 | 3347 static void |
9554 | 3348 add_chat_buddy_common(GaimConversation *conv, const char *name) |
4359 | 3349 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3350 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3351 GaimGtkChatPane *gtkchat; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3352 GaimConvChat *chat; |
9554 | 3353 GaimConvChatBuddyFlags flags; |
4359 | 3354 GtkTreeIter iter; |
3355 GtkListStore *ls; | |
9498 | 3356 GdkPixbuf *pixbuf; |
4359 | 3357 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3358 chat = GAIM_CONV_CHAT(conv); |
4359 | 3359 gtkconv = GAIM_GTK_CONVERSATION(conv); |
3360 gtkchat = gtkconv->u.chat; | |
3361 | |
3362 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list))); | |
3363 | |
9554 | 3364 flags = gaim_conv_chat_user_get_flags(chat, name); |
3365 pixbuf = get_chat_buddy_status_icon(chat, name, flags); | |
9498 | 3366 |
4359 | 3367 gtk_list_store_append(ls, &iter); |
9498 | 3368 gtk_list_store_set(ls, &iter, CHAT_USERS_ICON_COLUMN, pixbuf, |
9554 | 3369 CHAT_USERS_NAME_COLUMN, name, CHAT_USERS_FLAGS_COLUMN, flags, -1); |
9498 | 3370 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_NAME_COLUMN, |
4359 | 3371 GTK_SORT_ASCENDING); |
9554 | 3372 if (pixbuf) |
3373 g_object_unref(pixbuf); | |
4359 | 3374 } |
3375 | |
9605 | 3376 static gboolean |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3377 tab_complete(GaimConversation *conv) |
4359 | 3378 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3379 GaimGtkConversation *gtkconv; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3380 GaimConvChat *chat; |
4359 | 3381 GtkTextIter cursor, word_start, start_buffer; |
3382 int start; | |
3383 int most_matched = -1; | |
3384 char *entered, *partial = NULL; | |
3385 char *text; | |
8021 | 3386 char *nick_partial; |
9605 | 3387 const char *prefix; |
4359 | 3388 GList *matches = NULL; |
9605 | 3389 GList *list = NULL; |
3390 GList *l = NULL; | |
3391 gboolean command = FALSE; | |
4359 | 3392 |
3393 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3394 | |
3395 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, &start_buffer); | |
3396 gtk_text_buffer_get_iter_at_mark(gtkconv->entry_buffer, &cursor, | |
3397 gtk_text_buffer_get_insert(gtkconv->entry_buffer)); | |
3398 | |
3399 word_start = cursor; | |
3400 | |
3401 /* if there's nothing there just return */ | |
3402 if (!gtk_text_iter_compare(&cursor, &start_buffer)) | |
9605 | 3403 return (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) ? TRUE : FALSE; |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
3404 |
4359 | 3405 text = gtk_text_buffer_get_text(gtkconv->entry_buffer, &start_buffer, |
3406 &cursor, FALSE); | |
3407 | |
3408 /* if we're at the end of ": " we need to move back 2 spaces */ | |
3409 start = strlen(text) - 1; | |
3410 | |
8021 | 3411 if (strlen(text) >= 2 && !strncmp(&text[start-1], ": ", 2)) { |
4359 | 3412 gtk_text_iter_backward_chars(&word_start, 2); |
8021 | 3413 start-=2; |
3414 } | |
4359 | 3415 |
3416 /* find the start of the word that we're tabbing */ | |
3417 while (start >= 0 && text[start] != ' ') { | |
3418 gtk_text_iter_backward_char(&word_start); | |
3419 start--; | |
3420 } | |
3421 | |
9605 | 3422 prefix = gaim_gtk_get_cmd_prefix(); |
3423 if (start == -1 && (strlen(text) >= strlen(prefix)) && !strncmp(text, prefix, strlen(prefix))) { | |
3424 command = TRUE; | |
3425 gtk_text_iter_forward_chars(&word_start, strlen(prefix)); | |
3426 } | |
3427 | |
4359 | 3428 g_free(text); |
3429 | |
3430 entered = gtk_text_buffer_get_text(gtkconv->entry_buffer, &word_start, | |
3431 &cursor, FALSE); | |
3432 | |
8021 | 3433 if (!g_utf8_strlen(entered, -1)) { |
4359 | 3434 g_free(entered); |
9605 | 3435 return (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) ? TRUE : FALSE; |
4359 | 3436 } |
3437 | |
8021 | 3438 nick_partial = g_malloc(strlen(entered)+1); |
3439 | |
9605 | 3440 if (command) { |
3441 list = gaim_cmd_list(conv); | |
3442 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { | |
3443 chat = GAIM_CONV_CHAT(conv); | |
3444 list = gaim_conv_chat_get_users(chat); | |
3445 } else { | |
3446 g_free(nick_partial); | |
3447 g_free(entered); | |
3448 return FALSE; | |
3449 } | |
3450 | |
3451 for (l = list; l; l = l->next) { | |
3452 char *name; | |
3453 | |
3454 if (command) | |
3455 name = l->data; | |
3456 else { | |
3457 GaimConvChatBuddy *cb = l->data; | |
3458 name = cb->name; | |
3459 } | |
3460 | |
3461 strncpy(nick_partial, name, strlen(entered)); | |
8172 | 3462 nick_partial[strlen(entered)] = '\0'; |
8021 | 3463 if(gaim_utf8_strcasecmp(nick_partial, entered)) |
3464 continue; | |
4359 | 3465 |
3466 /* if we're here, it's a possible completion */ | |
3467 | |
3468 if (most_matched == -1) { | |
3469 /* | |
3470 * this will only get called once, since from now | |
3471 * on most_matched is >= 0 | |
3472 */ | |
9605 | 3473 most_matched = strlen(name); |
3474 partial = g_strdup(name); | |
4359 | 3475 } |
3476 else if (most_matched) { | |
9605 | 3477 char *tmp = g_strdup(name); |
8021 | 3478 |
3479 while (gaim_utf8_strcasecmp(tmp, partial)) { | |
3480 partial[most_matched] = '\0'; | |
3481 if(most_matched < strlen(tmp)) | |
3482 tmp[most_matched] = '\0'; | |
4359 | 3483 most_matched--; |
8021 | 3484 } |
8079 | 3485 most_matched++; |
8021 | 3486 |
3487 g_free(tmp); | |
4359 | 3488 } |
3489 | |
9605 | 3490 matches = g_list_append(matches, name); |
4359 | 3491 } |
3492 | |
8021 | 3493 g_free(nick_partial); |
3494 | |
4359 | 3495 /* we're only here if we're doing new style */ |
3496 | |
3497 /* if there weren't any matches, return */ | |
3498 if (!matches) { | |
3499 /* if matches isn't set partials won't be either */ | |
3500 g_free(entered); | |
9605 | 3501 if (command) |
3502 g_list_free(list); | |
3503 return (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) ? TRUE : FALSE; | |
4359 | 3504 } |
3505 | |
3506 gtk_text_buffer_delete(gtkconv->entry_buffer, &word_start, &cursor); | |
3507 | |
3508 if (!matches->next) { | |
3509 /* there was only one match. fill it in. */ | |
3510 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, &start_buffer); | |
3511 gtk_text_buffer_get_iter_at_mark(gtkconv->entry_buffer, &cursor, | |
3512 gtk_text_buffer_get_insert(gtkconv->entry_buffer)); | |
3513 | |
3514 if (!gtk_text_iter_compare(&cursor, &start_buffer)) { | |
3515 char *tmp = g_strdup_printf("%s: ", (char *)matches->data); | |
3516 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, tmp, -1); | |
3517 g_free(tmp); | |
3518 } | |
3519 else | |
3520 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, | |
3521 matches->data, -1); | |
3522 | |
3523 matches = g_list_remove(matches, matches->data); | |
3524 } | |
3525 else { | |
3526 /* | |
3527 * there were lots of matches, fill in as much as possible | |
3528 * and display all of them | |
3529 */ | |
3530 char *addthis = g_malloc0(1); | |
3531 | |
3532 while (matches) { | |
3533 char *tmp = addthis; | |
3534 addthis = g_strconcat(tmp, matches->data, " ", NULL); | |
3535 g_free(tmp); | |
3536 matches = g_list_remove(matches, matches->data); | |
3537 } | |
3538 | |
6982 | 3539 gaim_conversation_write(conv, NULL, addthis, GAIM_MESSAGE_NO_LOG, |
4359 | 3540 time(NULL)); |
3541 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, partial, -1); | |
3542 g_free(addthis); | |
3543 } | |
3544 | |
9605 | 3545 if (command) |
3546 g_list_free(list); | |
4359 | 3547 g_free(entered); |
3548 g_free(partial); | |
9605 | 3549 |
3550 return TRUE; | |
4359 | 3551 } |
3552 | |
3553 static GtkItemFactoryEntry menu_items[] = | |
3554 { | |
3555 /* Conversation menu */ | |
4596 | 3556 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>" }, |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3557 |
7887 | 3558 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb, |
7859 | 3559 0, "<StockItem>", GAIM_STOCK_IM }, |
3560 | |
3561 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>" }, | |
3562 | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3563 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3564 "<StockItem>", GTK_STOCK_FIND }, |
7859 | 3565 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, NULL }, |
4596 | 3566 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, |
4359 | 3567 "<StockItem>", GTK_STOCK_SAVE_AS }, |
8974 | 3568 { N_("/Conversation/Clear"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3569 |
4359 | 3570 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" }, |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3571 |
9468 | 3572 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", GAIM_STOCK_FILE_TRANSFER }, |
5907
18486c860a46
[gaim-migrate @ 6339]
Christian Hammond <chipx86@chipx86.com>
parents:
5902
diff
changeset
|
3573 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, |
18486c860a46
[gaim-migrate @ 6339]
Christian Hammond <chipx86@chipx86.com>
parents:
5902
diff
changeset
|
3574 0, NULL }, |
7859 | 3575 { N_("/Conversation/_Get Info"), NULL, menu_get_info_cb, 0, |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3576 "<StockItem>", GAIM_STOCK_INFO }, |
7859 | 3577 { N_("/Conversation/_Warn..."), NULL, menu_warn_cb, 0, |
3578 "<StockItem>", GAIM_STOCK_WARN }, | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3579 { N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3580 "<StockItem>", GAIM_STOCK_INVITE }, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3581 |
5907
18486c860a46
[gaim-migrate @ 6339]
Christian Hammond <chipx86@chipx86.com>
parents:
5902
diff
changeset
|
3582 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>" }, |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3583 |
7859 | 3584 { N_("/Conversation/A_lias..."), NULL, menu_alias_cb, 0, |
3585 "<StockItem>", GAIM_STOCK_EDIT }, | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3586 { N_("/Conversation/_Block..."), NULL, menu_block_cb, 0, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3587 "<StockItem>", GAIM_STOCK_BLOCK }, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3588 { N_("/Conversation/_Add..."), NULL, menu_add_remove_cb, 0, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3589 "<StockItem>", GTK_STOCK_ADD }, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3590 { N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3591 "<StockItem>", GTK_STOCK_REMOVE }, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3592 |
7859 | 3593 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>" }, |
3594 | |
8756 | 3595 { N_("/Conversation/Insert Lin_k..."), NULL, menu_insert_link_cb, 0, |
7859 | 3596 "<StockItem>", GAIM_STOCK_LINK }, |
9287 | 3597 { N_("/Conversation/Insert Imag_e..."), NULL, menu_insert_image_cb, 0, |
7859 | 3598 "<StockItem>", GAIM_STOCK_IMAGE }, |
3599 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3600 { "/Conversation/sep4", NULL, NULL, 0, "<Separator>" }, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3601 |
4596 | 3602 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0, |
4359 | 3603 "<StockItem>", GTK_STOCK_CLOSE }, |
3604 | |
3605 /* Options */ | |
4596 | 3606 { N_("/_Options"), NULL, NULL, 0, "<Branch>" }, |
3607 { N_("/Options/Enable _Logging"), NULL, menu_logging_cb, 0, "<CheckItem>" }, | |
3608 { N_("/Options/Enable _Sounds"), NULL, menu_sounds_cb, 0, "<CheckItem>" }, | |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
3609 { N_("/Options/Show Formatting _Toolbar"), NULL, menu_toolbar_cb, 0, "<CheckItem>" }, |
9188 | 3610 { N_("/Options/Show T_imestamps"), "F2", menu_timestamps_cb, 0, "<CheckItem>" }, |
4359 | 3611 }; |
3612 | |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
3613 static const int menu_item_count = |
4359 | 3614 sizeof(menu_items) / sizeof(*menu_items); |
3615 | |
4602
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
3616 static char * |
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
3617 item_factory_translate_func (const char *path, gpointer func_data) |
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
3618 { |
7386 | 3619 return _((char *)path); |
4602
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
3620 } |
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
3621 |
4359 | 3622 static GtkWidget * |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3623 setup_menubar(GaimConvWindow *win) |
4359 | 3624 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3625 GaimGtkWindow *gtkwin; |
5116 | 3626 GtkAccelGroup *accel_group; |
4359 | 3627 gtkwin = GAIM_GTK_WINDOW(win); |
3628 | |
6398
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
3629 accel_group = gtk_accel_group_new (); |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
3630 gtk_window_add_accel_group (GTK_WINDOW (gtkwin->window), accel_group); |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
3631 g_object_unref (accel_group); |
5116 | 3632 |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3633 gtkwin->menu.item_factory = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3634 gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3635 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3636 gtk_item_factory_set_translate_func(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3637 item_factory_translate_func, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3638 NULL, NULL); |
4630 | 3639 |
3640 gtk_item_factory_create_items(gtkwin->menu.item_factory, menu_item_count, | |
4359 | 3641 menu_items, win); |
7420 | 3642 g_signal_connect(G_OBJECT(accel_group), "accel-changed", |
3643 G_CALLBACK(gaim_gtk_save_accels_cb), NULL); | |
4359 | 3644 |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3645 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3646 gtkwin->menu.menubar = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3647 gtk_item_factory_get_widget(gtkwin->menu.item_factory, "<main>"); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3648 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3649 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3650 gtkwin->menu.view_log = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3651 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
7295 | 3652 N_("/Conversation/View Log")); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3653 /* --- */ |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3654 |
9468 | 3655 gtkwin->menu.send_file = |
3656 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
3657 N_("/Conversation/Send File...")); | |
9498 | 3658 |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3659 gtkwin->menu.add_pounce = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3660 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3661 N_("/Conversation/Add Buddy Pounce...")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3662 |
7879 | 3663 /* --- */ |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3664 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3665 gtkwin->menu.get_info = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3666 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
7859 | 3667 N_("/Conversation/Get Info")); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3668 |
7879 | 3669 gtkwin->menu.warn = |
3670 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
3671 N_("/Conversation/Warn...")); | |
3672 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3673 gtkwin->menu.invite = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3674 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3675 N_("/Conversation/Invite...")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3676 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3677 /* --- */ |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3678 |
7879 | 3679 gtkwin->menu.alias = |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3680 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
7879 | 3681 N_("/Conversation/Alias...")); |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3682 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3683 gtkwin->menu.block = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3684 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3685 N_("/Conversation/Block...")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3686 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3687 gtkwin->menu.add = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3688 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3689 N_("/Conversation/Add...")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3690 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3691 gtkwin->menu.remove = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3692 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3693 N_("/Conversation/Remove...")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3694 |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3695 /* --- */ |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3696 |
7879 | 3697 gtkwin->menu.insert_link = |
3698 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
3699 N_("/Conversation/Insert Link...")); | |
3700 | |
3701 gtkwin->menu.insert_image = | |
3702 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
3703 N_("/Conversation/Insert Image...")); | |
3704 | |
3705 /* --- */ | |
3706 | |
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3707 gtkwin->menu.logging = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3708 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3709 N_("/Options/Enable Logging")); |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3710 gtkwin->menu.sounds = |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3711 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
3712 N_("/Options/Enable Sounds")); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
3713 gtkwin->menu.show_formatting_toolbar = |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
3714 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
3715 N_("/Options/Show Formatting Toolbar")); |
9188 | 3716 gtkwin->menu.show_timestamps = |
3717 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
3718 N_("/Options/Show Timestamps")); | |
4359 | 3719 |
4360
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
3720 generate_send_as_items(win, NULL); |
4359 | 3721 |
3722 gtk_widget_show(gtkwin->menu.menubar); | |
4931 | 3723 |
3724 return gtkwin->menu.menubar; | |
4359 | 3725 } |
3726 | |
9759 | 3727 GtkWidget * |
3728 gaim_gtkconv_button_new(const char *icon, const char *text, const char *tooltip, GtkTooltips *tooltips, void *callback, void *data) | |
9749 | 3729 { |
3730 GtkWidget *button; | |
3731 int buttons; | |
3732 | |
3733 buttons = gaim_prefs_get_int("/gaim/gtk/conversations/button_type"); | |
3734 button = gaim_pixbuf_button_from_stock( | |
3735 (buttons == GAIM_BUTTON_IMAGE ? NULL : text), | |
3736 (buttons == GAIM_BUTTON_TEXT ? NULL : icon), | |
9750 | 3737 GAIM_BUTTON_VERTICAL); |
9766 | 3738 if (tooltip != NULL) |
3739 gtk_tooltips_set_tip(tooltips, button, tooltip, NULL); | |
9749 | 3740 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
9766 | 3741 if (callback != NULL) |
3742 g_signal_connect(G_OBJECT(button), "clicked", | |
3743 G_CALLBACK(callback), data); | |
9749 | 3744 |
3745 return button; | |
3746 } | |
3747 | |
4359 | 3748 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3749 setup_im_buttons(GaimConversation *conv, GtkWidget *parent) |
4359 | 3750 { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3751 GaimConnection *gc; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3752 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3753 GaimGtkImPane *gtkim; |
8811 | 3754 GaimButtonStyle button_type; |
9749 | 3755 GList *children; |
4359 | 3756 |
3757 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3758 gtkim = gtkconv->u.im; | |
3759 gc = gaim_conversation_get_gc(conv); | |
3760 | |
9749 | 3761 /* Remove anything else in our parent */ |
3762 children = gtk_container_get_children(GTK_CONTAINER(parent)); | |
3763 while (children != NULL) { | |
9885 | 3764 if(children->data != gtkim->icon_container) |
3765 gtk_container_remove(GTK_CONTAINER(parent), children->data); | |
9749 | 3766 children = g_list_remove(children, children->data); |
3767 } | |
3768 | |
9750 | 3769 /* The buttons, from left to right */ |
9749 | 3770 |
3771 /* Block button */ | |
9759 | 3772 gtkim->block = gaim_gtkconv_button_new(GAIM_STOCK_BLOCK, _("Block"), |
9749 | 3773 _("Block the user"), |
3774 gtkconv->tooltips, block_cb, conv); | |
9750 | 3775 gtk_box_pack_start(GTK_BOX(parent), gtkim->block, TRUE, TRUE, 0); |
9749 | 3776 gtk_size_group_add_widget(gtkconv->sg, gtkim->block); |
3777 | |
3778 /* Send File button */ | |
9759 | 3779 gtkim->send_file = gaim_gtkconv_button_new(GAIM_STOCK_FILE_TRANSFER, _("Send File"), |
9749 | 3780 _("Send a file to the user"), |
3781 gtkconv->tooltips, send_file_cb, conv); | |
9750 | 3782 gtk_box_pack_start(GTK_BOX(parent), gtkim->send_file, TRUE, TRUE, 0); |
9749 | 3783 gtk_size_group_add_widget(gtkconv->sg, gtkim->send_file); |
3784 | |
3785 /* Add button */ | |
9759 | 3786 gtkconv->add = gaim_gtkconv_button_new(GTK_STOCK_ADD, _("Add"), |
9749 | 3787 _("Add the user to your buddy list"), |
3788 gtkconv->tooltips, add_remove_cb, conv); | |
9750 | 3789 gtk_box_pack_start(GTK_BOX(parent), gtkconv->add, TRUE, TRUE, 0); |
9749 | 3790 gtk_size_group_add_widget(gtkconv->sg, gtkconv->add); |
3791 | |
3792 /* Remove button */ | |
9759 | 3793 gtkconv->remove = gaim_gtkconv_button_new(GTK_STOCK_REMOVE, _("Remove"), |
9749 | 3794 _("Remove the user from your buddy list"), |
3795 gtkconv->tooltips, add_remove_cb, conv); | |
9750 | 3796 gtk_box_pack_start(GTK_BOX(parent), gtkconv->remove, TRUE, TRUE, 0); |
9749 | 3797 gtk_size_group_add_widget(gtkconv->sg, gtkconv->remove); |
3798 | |
3799 /* Info button */ | |
9759 | 3800 gtkconv->info = gaim_gtkconv_button_new(GAIM_STOCK_INFO, _("Info"), |
9749 | 3801 _("Get the user's information"), |
3802 gtkconv->tooltips, info_cb, conv); | |
9750 | 3803 gtk_box_pack_start(GTK_BOX(parent), gtkconv->info, TRUE, TRUE, 0); |
9749 | 3804 gtk_size_group_add_widget(gtkconv->sg, gtkconv->info); |
4359 | 3805 |
3806 /* Send button */ | |
9759 | 3807 gtkconv->send = gaim_gtkconv_button_new(GAIM_STOCK_SEND, _("Send"), |
9749 | 3808 _("Send message"), |
3809 gtkconv->tooltips, send_cb, conv); | |
4359 | 3810 gtk_box_pack_end(GTK_BOX(parent), gtkconv->send, FALSE, FALSE, 0); |
3811 | |
3812 /* Separator */ | |
3813 gtkim->sep2 = gtk_vseparator_new(); | |
3814 gtk_box_pack_end(GTK_BOX(parent), gtkim->sep2, FALSE, TRUE, 0); | |
3815 gtk_widget_show(gtkim->sep2); | |
3816 | |
3817 gaim_gtkconv_update_buttons_by_protocol(conv); | |
3818 | |
8811 | 3819 /* Check if the buttons should be visible or not */ |
9150 | 3820 button_type = gaim_prefs_get_int("/gaim/gtk/conversations/button_type"); |
8811 | 3821 if (button_type == GAIM_BUTTON_NONE) |
9749 | 3822 gtk_widget_hide(parent); |
8811 | 3823 else |
9749 | 3824 gtk_widget_show(parent); |
4359 | 3825 } |
3826 | |
3827 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3828 setup_chat_buttons(GaimConversation *conv, GtkWidget *parent) |
4359 | 3829 { |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3830 GaimConnection *gc; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3831 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3832 GaimGtkChatPane *gtkchat; |
8811 | 3833 GaimButtonStyle button_type; |
9750 | 3834 GList *children; |
4359 | 3835 |
3836 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3837 gtkchat = gtkconv->u.chat; | |
3838 gc = gaim_conversation_get_gc(conv); | |
3839 | |
9750 | 3840 /* Remove anything else in our parent */ |
3841 children = gtk_container_get_children(GTK_CONTAINER(parent)); | |
3842 while (children != NULL) { | |
3843 gtk_container_remove(GTK_CONTAINER(parent), children->data); | |
3844 children = g_list_remove(children, children->data); | |
3845 } | |
3846 | |
3847 /* The buttons, from left to right */ | |
3848 | |
3849 /* Invite */ | |
9759 | 3850 gtkchat->invite = gaim_gtkconv_button_new(GAIM_STOCK_INVITE, _("Invite"), |
9817 | 3851 _("Invite a user"), |
9750 | 3852 gtkconv->tooltips, invite_cb, conv); |
3853 gtk_box_pack_start(GTK_BOX(parent), gtkchat->invite, TRUE, TRUE, 0); | |
3854 gtk_size_group_add_widget(gtkconv->sg, gtkchat->invite); | |
3855 | |
3856 /* Add button */ | |
9759 | 3857 gtkconv->add = gaim_gtkconv_button_new(GTK_STOCK_ADD, _("Add"), |
9750 | 3858 _("Add the chat to your buddy list"), |
3859 gtkconv->tooltips, add_remove_cb, conv); | |
3860 gtk_box_pack_start(GTK_BOX(parent), gtkconv->add, TRUE, TRUE, 0); | |
3861 gtk_size_group_add_widget(gtkconv->sg, gtkconv->add); | |
3862 | |
3863 /* Remove button */ | |
9759 | 3864 gtkconv->remove = gaim_gtkconv_button_new(GTK_STOCK_REMOVE, _("Remove"), |
9750 | 3865 _("Remove the chat from your buddy list"), |
3866 gtkconv->tooltips, add_remove_cb, conv); | |
3867 gtk_box_pack_start(GTK_BOX(parent), gtkconv->remove, TRUE, TRUE, 0); | |
3868 gtk_size_group_add_widget(gtkconv->sg, gtkconv->remove); | |
7996
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3869 |
4359 | 3870 /* Send button */ |
9759 | 3871 gtkconv->send = gaim_gtkconv_button_new(GAIM_STOCK_SEND, _("Send"), |
9750 | 3872 _("Send message"), |
3873 gtkconv->tooltips, send_cb, conv); | |
4359 | 3874 gtk_box_pack_end(GTK_BOX(parent), gtkconv->send, FALSE, FALSE, 0); |
9750 | 3875 gtk_size_group_add_widget(gtkconv->sg, gtkconv->send); |
4359 | 3876 |
3877 /* Separator */ | |
7996
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3878 gtkchat->sep = gtk_vseparator_new(); |
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3879 gtk_box_pack_end(GTK_BOX(parent), gtkchat->sep, FALSE, TRUE, 0); |
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3880 gtk_widget_show(gtkchat->sep); |
4359 | 3881 |
7996
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3882 gaim_gtkconv_update_buttons_by_protocol(conv); |
334ab1319406
[gaim-migrate @ 8673]
Christian Hammond <chipx86@chipx86.com>
parents:
7995
diff
changeset
|
3883 |
8811 | 3884 /* Check if the buttons should be visible or not */ |
9150 | 3885 button_type = gaim_prefs_get_int("/gaim/gtk/conversations/button_type"); |
8811 | 3886 if (button_type == GAIM_BUTTON_NONE) |
3887 gtk_widget_hide(gtkconv->bbox); | |
3888 else | |
3889 gtk_widget_show(gtkconv->bbox); | |
4359 | 3890 } |
3891 | |
3892 | |
7971 | 3893 static void topic_callback(GtkWidget *w, GaimConversation *conv) |
3894 { | |
3895 GaimPluginProtocolInfo *prpl_info = NULL; | |
3896 GaimConnection *gc; | |
3897 GaimGtkConversation *gtkconv; | |
3898 GaimGtkChatPane *gtkchat; | |
8858 | 3899 const char *new_topic; |
3900 const char *current_topic; | |
7971 | 3901 |
3902 gc = gaim_conversation_get_gc(conv); | |
3903 | |
3904 if(!gc || !(prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl))) | |
3905 return; | |
3906 | |
3907 if(prpl_info->set_chat_topic == NULL) | |
3908 return; | |
3909 | |
3910 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3911 gtkchat = gtkconv->u.chat; | |
8858 | 3912 new_topic = gtk_entry_get_text(GTK_ENTRY(gtkchat->topic_text)); |
3913 current_topic = gaim_conv_chat_get_topic(GAIM_CONV_CHAT(conv)); | |
3914 | |
3915 if(current_topic && !g_utf8_collate(new_topic, current_topic)) | |
7971 | 3916 return; |
3917 | |
8858 | 3918 prpl_info->set_chat_topic(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), |
3919 new_topic); | |
7971 | 3920 } |
3921 | |
9554 | 3922 static gint |
3923 sort_chat_users(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata) | |
3924 { | |
3925 GaimConvChatBuddyFlags f1 = 0, f2 = 0; | |
3926 char *user1 = NULL, *user2 = NULL; | |
3927 gint ret = 0; | |
3928 | |
3929 gtk_tree_model_get(model, a, CHAT_USERS_NAME_COLUMN, &user1, CHAT_USERS_FLAGS_COLUMN, &f1, -1); | |
3930 gtk_tree_model_get(model, b, CHAT_USERS_NAME_COLUMN, &user2, CHAT_USERS_FLAGS_COLUMN, &f2, -1); | |
3931 | |
3932 if (user1 == NULL || user2 == NULL) { | |
3933 if (!(user1 == NULL && user2 == NULL)) | |
3934 ret = (user1 == NULL) ? -1: 1; | |
3935 } else if (f1 != f2) { | |
3936 /* sort more important users first */ | |
3937 ret = (f1 > f2) ? -1 : 1; | |
3938 } else { | |
3939 ret = g_utf8_collate(user1, user2); | |
3940 } | |
3941 | |
3942 g_free(user1); | |
3943 g_free(user2); | |
3944 | |
3945 return ret; | |
3946 } | |
3947 | |
4359 | 3948 static GtkWidget * |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3949 setup_chat_pane(GaimConversation *conv) |
4359 | 3950 { |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3951 GaimPluginProtocolInfo *prpl_info = NULL; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3952 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3953 GaimGtkChatPane *gtkchat; |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3954 GaimConnection *gc; |
4359 | 3955 GtkWidget *vpaned, *hpaned; |
10175 | 3956 GtkWidget *vbox, *hbox, *frame; |
4359 | 3957 GtkWidget *lbox, *bbox; |
3958 GtkWidget *label; | |
3959 GtkWidget *list; | |
3960 GtkWidget *button; | |
7949 | 3961 GtkWidget *sw; |
4359 | 3962 GtkListStore *ls; |
3963 GtkCellRenderer *rend; | |
3964 GtkTreeViewColumn *col; | |
9080 | 3965 GList *focus_chain = NULL; |
4359 | 3966 |
3967 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
3968 gtkchat = gtkconv->u.chat; | |
3969 gc = gaim_conversation_get_gc(conv); | |
3970 | |
3971 /* Setup the outer pane. */ | |
3972 vpaned = gtk_vpaned_new(); | |
3973 gtk_widget_show(vpaned); | |
3974 | |
3975 /* Setup the top part of the pane. */ | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3976 vbox = gtk_vbox_new(FALSE, 6); |
8914 | 3977 gtk_paned_pack1(GTK_PANED(vpaned), vbox, TRUE, TRUE); |
4359 | 3978 gtk_widget_show(vbox); |
3979 | |
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3980 if (gc != NULL) |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3981 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3982 |
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3983 if (prpl_info->options & OPT_PROTO_CHAT_TOPIC) |
4359 | 3984 { |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3985 hbox = gtk_hbox_new(FALSE, 6); |
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3986 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
4359 | 3987 gtk_widget_show(hbox); |
3988 | |
3989 label = gtk_label_new(_("Topic:")); | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3990 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
4359 | 3991 gtk_widget_show(label); |
3992 | |
3993 gtkchat->topic_text = gtk_entry_new(); | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3994 |
7971 | 3995 if(prpl_info->set_chat_topic == NULL) { |
3996 gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); | |
3997 } else { | |
3998 g_signal_connect(GTK_OBJECT(gtkchat->topic_text), "activate", | |
3999 G_CALLBACK(topic_callback), conv); | |
4000 } | |
4001 | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4002 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); |
4359 | 4003 gtk_widget_show(gtkchat->topic_text); |
4004 } | |
4005 | |
4006 /* Setup the horizontal pane. */ | |
4007 hpaned = gtk_hpaned_new(); | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4008 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); |
4359 | 4009 gtk_widget_show(hpaned); |
4010 | |
10175 | 4011 /* Setup gtkihmtml. */ |
4012 frame = gaim_gtk_create_imhtml(FALSE, >kconv->imhtml, NULL); | |
4013 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml"); | |
4014 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), | |
4015 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")); | |
4016 gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE); | |
4017 gtk_widget_show(frame); | |
4018 | |
4019 gtk_widget_set_size_request(gtkconv->imhtml, | |
5550
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
4020 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_width"), |
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
4021 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_height")); |
10175 | 4022 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
8914 | 4023 G_CALLBACK(size_allocate_cb), conv); |
4024 | |
4359 | 4025 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", |
4026 G_CALLBACK(entry_stop_rclick_cb), NULL); | |
8105 | 4027 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
6057 | 4028 G_CALLBACK(refocus_entry_cb), gtkconv); |
8109 | 4029 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
4030 G_CALLBACK(refocus_entry_cb), gtkconv); | |
4359 | 4031 |
4032 /* Build the right pane. */ | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4033 lbox = gtk_vbox_new(FALSE, 6); |
4409
0521eec12c33
[gaim-migrate @ 4682]
Christian Hammond <chipx86@chipx86.com>
parents:
4398
diff
changeset
|
4034 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
4359 | 4035 gtk_widget_show(lbox); |
4036 | |
4037 /* Setup the label telling how many people are in the room. */ | |
4038 gtkchat->count = gtk_label_new(_("0 people in room")); | |
4039 gtk_box_pack_start(GTK_BOX(lbox), gtkchat->count, FALSE, FALSE, 0); | |
4040 gtk_widget_show(gtkchat->count); | |
4041 | |
4042 /* Setup the list of users. */ | |
7949 | 4043 sw = gtk_scrolled_window_new(NULL, NULL); |
4044 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
8076 | 4045 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
7949 | 4046 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); |
4047 gtk_box_pack_start(GTK_BOX(lbox), sw, TRUE, TRUE, 0); | |
4048 gtk_widget_show(sw); | |
4359 | 4049 |
9554 | 4050 ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, |
4051 G_TYPE_INT); | |
4052 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_NAME_COLUMN, | |
4053 sort_chat_users, NULL, NULL); | |
9498 | 4054 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_NAME_COLUMN, |
4359 | 4055 GTK_SORT_ASCENDING); |
4056 | |
4057 list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); | |
4058 | |
9498 | 4059 rend = gtk_cell_renderer_pixbuf_new(); |
4060 | |
4359 | 4061 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
9498 | 4062 "pixbuf", CHAT_USERS_ICON_COLUMN, NULL); |
9554 | 4063 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); |
4064 | |
9498 | 4065 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
4359 | 4066 |
4067 g_signal_connect(G_OBJECT(list), "button_press_event", | |
4068 G_CALLBACK(right_click_chat_cb), conv); | |
8143 | 4069 g_signal_connect(G_OBJECT(list), "popup-menu", |
4070 G_CALLBACK(gtkconv_chat_popup_menu_cb), conv); | |
4359 | 4071 |
9498 | 4072 rend = gtk_cell_renderer_text_new(); |
4073 | |
4359 | 4074 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
9498 | 4075 "text", CHAT_USERS_NAME_COLUMN, NULL); |
4359 | 4076 gtk_tree_view_column_set_clickable(GTK_TREE_VIEW_COLUMN(col), TRUE); |
4077 | |
4078 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); | |
4079 | |
4080 gtk_widget_set_size_request(list, 150, -1); | |
4081 | |
4082 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); | |
4083 gtk_widget_show(list); | |
4084 | |
4085 gtkchat->list = list; | |
4086 | |
7949 | 4087 gtk_container_add(GTK_CONTAINER(sw), list); |
4359 | 4088 |
4089 /* Setup the user list toolbar. */ | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4090 bbox = gtk_hbox_new(TRUE, 6); |
4359 | 4091 gtk_box_pack_start(GTK_BOX(lbox), bbox, FALSE, FALSE, 0); |
4092 gtk_widget_show(bbox); | |
4093 | |
4094 /* IM */ | |
10221 | 4095 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_IM, |
4359 | 4096 GAIM_BUTTON_VERTICAL); |
4097 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
4098 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
4370
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
4099 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("IM the user"), NULL); |
4359 | 4100 g_signal_connect(G_OBJECT(button), "clicked", |
7961 | 4101 G_CALLBACK(chat_im_button_cb), conv); |
4359 | 4102 |
4103 gtk_widget_show(button); | |
4104 | |
4105 /* Ignore */ | |
4106 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_IGNORE, | |
4107 GAIM_BUTTON_VERTICAL); | |
4108 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
4109 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
4370
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
4110 gtk_tooltips_set_tip(gtkconv->tooltips, button, |
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
4111 _("Ignore the user"), NULL); |
4359 | 4112 g_signal_connect(G_OBJECT(button), "clicked", |
4113 G_CALLBACK(ignore_cb), conv); | |
4114 gtk_widget_show(button); | |
4115 | |
4116 /* Info */ | |
4117 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_INFO, | |
4118 GAIM_BUTTON_VERTICAL); | |
4119 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); | |
4120 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
4121 gtk_tooltips_set_tip(gtkconv->tooltips, button, | |
4370
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
4122 _("Get the user's information"), NULL); |
4359 | 4123 g_signal_connect(G_OBJECT(button), "clicked", |
4124 G_CALLBACK(info_cb), conv); | |
4125 | |
4126 gtk_widget_show(button); | |
4127 | |
4128 gtkconv->info = button; | |
4129 | |
10175 | 4130 /* Setup the bottom half of the conversation window */ |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4131 vbox = gtk_vbox_new(FALSE, 6); |
8914 | 4132 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, TRUE); |
4963
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
4133 gtk_widget_show(vbox); |
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
4134 |
9332 | 4135 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6); |
4136 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0); | |
4137 gtk_widget_show(gtkconv->lower_hbox); | |
4138 | |
4139 vbox = gtk_vbox_new(FALSE, 6); | |
4140 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0); | |
4141 gtk_widget_show(vbox); | |
4142 | |
10175 | 4143 /* Setup the toolbar, entry widget and all signals */ |
4144 frame = gaim_gtk_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar); | |
10080 | 4145 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
10175 | 4146 gtk_widget_show(frame); |
4147 | |
9005 | 4148 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); |
8456 | 4149 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
9699 | 4150 gaim_account_get_protocol_name(conv->account)); |
10175 | 4151 gtk_widget_set_size_request(gtkconv->entry, -1, |
4152 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height")); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4153 gtkconv->entry_buffer = |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4154 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
7949 | 4155 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); |
4156 | |
4157 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", | |
8105 | 4158 G_CALLBACK(entry_key_press_cb), conv); |
10115 | 4159 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", |
4160 G_CALLBACK(send_cb), conv); | |
4359 | 4161 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
4162 G_CALLBACK(entry_stop_rclick_cb), NULL); | |
8914 | 4163 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", |
4164 G_CALLBACK(size_allocate_cb), conv); | |
4359 | 4165 |
10175 | 4166 default_formatize(conv); |
4359 | 4167 |
4168 /* Setup the bottom button box. */ | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4169 gtkconv->bbox = gtk_hbox_new(FALSE, 6); |
4359 | 4170 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->bbox, FALSE, FALSE, 0); |
4171 setup_chat_buttons(conv, gtkconv->bbox); | |
4172 | |
9080 | 4173 /* |
4174 * Focus for chat windows should be as follows: | |
4175 * Tab title -> chat topic -> conversation scrollback -> user list -> | |
4176 * user list buttons -> entry -> buttons at bottom | |
4177 */ | |
4178 focus_chain = g_list_prepend(focus_chain, gtkconv->bbox); | |
9332 | 4179 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
9080 | 4180 gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focus_chain); |
4181 | |
4359 | 4182 return vpaned; |
4183 } | |
4184 | |
4185 static GtkWidget * | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4186 setup_im_pane(GaimConversation *conv) |
4359 | 4187 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4188 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4189 GaimGtkImPane *gtkim; |
10175 | 4190 GtkWidget *frame; |
4359 | 4191 GtkWidget *paned; |
10175 | 4192 GtkWidget *vbox; |
4193 GtkWidget *vbox2; | |
9080 | 4194 GList *focus_chain = NULL; |
4359 | 4195 |
4196 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
4197 gtkim = gtkconv->u.im; | |
4198 | |
10175 | 4199 /* Setup the outer pane */ |
4359 | 4200 paned = gtk_vpaned_new(); |
4201 gtk_widget_show(paned); | |
4202 | |
10175 | 4203 /* Setup the top part of the pane */ |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4204 vbox = gtk_vbox_new(FALSE, 6); |
4409
0521eec12c33
[gaim-migrate @ 4682]
Christian Hammond <chipx86@chipx86.com>
parents:
4398
diff
changeset
|
4205 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); |
4359 | 4206 gtk_widget_show(vbox); |
4207 | |
10175 | 4208 /* Setup the gtkimhtml widget */ |
4209 frame = gaim_gtk_create_imhtml(FALSE, >kconv->imhtml, NULL); | |
4210 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml"); | |
4211 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), | |
4212 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")); | |
4213 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); | |
4214 gtk_widget_show(frame); | |
4215 | |
4216 gtk_widget_set_size_request(gtkconv->imhtml, | |
5550
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
4217 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_width"), |
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
4218 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_height")); |
10175 | 4219 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
8914 | 4220 G_CALLBACK(size_allocate_cb), conv); |
4359 | 4221 |
4222 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", | |
4223 G_CALLBACK(entry_stop_rclick_cb), NULL); | |
8105 | 4224 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
6057 | 4225 G_CALLBACK(refocus_entry_cb), gtkconv); |
8109 | 4226 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
4227 G_CALLBACK(refocus_entry_cb), gtkconv); | |
4359 | 4228 |
10175 | 4229 /* Setup the bottom half of the conversation window */ |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4230 vbox2 = gtk_vbox_new(FALSE, 6); |
8914 | 4231 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, TRUE); |
4963
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
4232 gtk_widget_show(vbox2); |
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
4233 |
9332 | 4234 gtkconv->lower_hbox = gtk_hbox_new(FALSE, 6); |
4235 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->lower_hbox, TRUE, TRUE, 0); | |
4236 gtk_widget_show(gtkconv->lower_hbox); | |
4237 | |
4238 vbox2 = gtk_vbox_new(FALSE, 6); | |
4239 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox2, TRUE, TRUE, 0); | |
4240 gtk_widget_show(vbox2); | |
8821 | 4241 |
10175 | 4242 /* Setup the toolbar, entry widget and all signals */ |
4243 frame = gaim_gtk_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar); | |
10080 | 4244 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0); |
10175 | 4245 gtk_widget_show(frame); |
4246 | |
9005 | 4247 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); |
8456 | 4248 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
9699 | 4249 gaim_account_get_protocol_name(conv->account)); |
10175 | 4250 gtk_widget_set_size_request(gtkconv->entry, -1, |
4251 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height")); | |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4252 gtkconv->entry_buffer = |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4253 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
7949 | 4254 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", conv); |
4963
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
4255 |
4359 | 4256 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", |
10115 | 4257 G_CALLBACK(entry_key_press_cb), conv); |
4258 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", G_CALLBACK(send_cb), conv); | |
4359 | 4259 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
4260 G_CALLBACK(entry_stop_rclick_cb), NULL); | |
8914 | 4261 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", |
4262 G_CALLBACK(size_allocate_cb), conv); | |
4359 | 4263 |
4264 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", | |
4265 G_CALLBACK(insert_text_cb), conv); | |
4266 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", | |
4267 G_CALLBACK(delete_text_cb), conv); | |
4268 | |
8481 | 4269 /* had to move this after the imtoolbar is attached so that the |
4270 * signals get fired to toggle the buttons on the toolbar as well. | |
4271 */ | |
4272 default_formatize(conv); | |
4359 | 4273 |
9749 | 4274 /* Setup the bottom button box. */ |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4275 gtkconv->bbox = gtk_hbox_new(FALSE, 6); |
4359 | 4276 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->bbox, FALSE, FALSE, 0); |
4277 setup_im_buttons(conv, gtkconv->bbox); | |
9749 | 4278 |
8758 | 4279 gtkconv->u.im->animate = gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons"); |
9687 | 4280 gtkconv->u.im->show_icon = TRUE; |
4359 | 4281 |
9080 | 4282 /* |
4283 * Focus for IM windows should be as follows: | |
4284 * Tab title -> conversation scrollback -> entry -> buttons at bottom | |
4285 */ | |
4286 focus_chain = g_list_prepend(focus_chain, gtkconv->bbox); | |
9332 | 4287 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
9080 | 4288 gtk_container_set_focus_chain(GTK_CONTAINER(vbox2), focus_chain); |
8143 | 4289 |
4359 | 4290 return paned; |
4291 } | |
4292 | |
4293 static void | |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4294 conv_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, |
4939
4d50e125b0fa
[gaim-migrate @ 5273]
Christian Hammond <chipx86@chipx86.com>
parents:
4931
diff
changeset
|
4295 GtkSelectionData *sd, guint info, guint t, |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4296 GaimConversation *conv) |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4297 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4298 GaimConvWindow *win = conv->window; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4299 GaimConversation *c; |
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4300 if (sd->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE)) |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4301 { |
4781 | 4302 GaimBlistNode *n = NULL; |
6695 | 4303 GaimBuddy *b; |
9622 | 4304 unsigned int index; |
4305 | |
4781 | 4306 memcpy(&n, sd->data, sizeof(n)); |
4939
4d50e125b0fa
[gaim-migrate @ 5273]
Christian Hammond <chipx86@chipx86.com>
parents:
4931
diff
changeset
|
4307 |
6695 | 4308 if (GAIM_BLIST_NODE_IS_CONTACT(n)) |
4309 b = gaim_contact_get_priority_buddy((GaimContact*)n); | |
4310 else if (GAIM_BLIST_NODE_IS_BUDDY(n)) | |
4311 b = (GaimBuddy*)n; | |
4312 else | |
4781 | 4313 return; |
4939
4d50e125b0fa
[gaim-migrate @ 5273]
Christian Hammond <chipx86@chipx86.com>
parents:
4931
diff
changeset
|
4314 |
9622 | 4315 /* |
4316 * If we already have an open conversation with this buddy, then | |
4317 * just move the conv to this window. Otherwise, create a new | |
4318 * conv and add it to this window. | |
4319 */ | |
4320 c = gaim_find_conversation(b->name); | |
4321 if (c != NULL) { | |
4322 GaimConvWindow *oldwin; | |
4323 oldwin = gaim_conversation_get_window(c); | |
4324 index = gaim_conversation_get_index(c); | |
4325 if (oldwin != win) { | |
4326 gaim_conv_window_remove_conversation(oldwin, index); | |
4327 gaim_conv_window_add_conversation(win, c); | |
4328 } | |
4329 } else { | |
4330 c = gaim_conversation_new(GAIM_CONV_IM, b->account, b->name); | |
4331 gaim_conv_window_add_conversation(win, c); | |
4332 } | |
4333 | |
4334 /* Make this conversation the active conversation */ | |
4335 index = gaim_conversation_get_index(c); | |
4336 gaim_conv_window_switch_conversation(win, index); | |
8802
1076cd8579ea
[gaim-migrate @ 9564]
Christian Hammond <chipx86@chipx86.com>
parents:
8758
diff
changeset
|
4337 |
1076cd8579ea
[gaim-migrate @ 9564]
Christian Hammond <chipx86@chipx86.com>
parents:
8758
diff
changeset
|
4338 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
4702 | 4339 } |
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4340 else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4341 { |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4342 char *protocol = NULL; |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4343 char *username = NULL; |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4344 GaimAccount *account; |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4345 |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4346 if (gaim_gtk_parse_x_im_contact(sd->data, FALSE, &account, |
7718 | 4347 &protocol, &username, NULL)) |
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4348 { |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4349 if (account == NULL) |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4350 { |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4351 gaim_notify_error(NULL, NULL, |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4352 _("You are not currently signed on with an account that " |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4353 "can add that buddy."), NULL); |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4354 } |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4355 else |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4356 { |
7718 | 4357 c = gaim_conversation_new(GAIM_CONV_IM, account, username); |
4358 gaim_conv_window_add_conversation(win, c); | |
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4359 } |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4360 } |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4361 |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4362 if (username != NULL) g_free(username); |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4363 if (protocol != NULL) g_free(protocol); |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4364 |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4365 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4366 } |
9525 | 4367 else if (sd->target == gdk_atom_intern("text/uri-list", FALSE)) { |
10229 | 4368 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
4369 gaim_dnd_file_manage(sd, gaim_conversation_get_account(conv), gaim_conversation_get_name(conv)); | |
10145 | 4370 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
9495 | 4371 } |
10145 | 4372 else |
4373 gtk_drag_finish(dc, FALSE, FALSE, t); | |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4374 } |
4359 | 4375 |
4376 /************************************************************************** | |
4377 * GTK+ window ops | |
4378 **************************************************************************/ | |
4379 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4380 gaim_gtk_new_window(GaimConvWindow *win) |
4359 | 4381 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4382 GaimGtkWindow *gtkwin; |
4359 | 4383 GtkPositionType pos; |
4384 GtkWidget *testidea; | |
4385 GtkWidget *menubar; | |
4386 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4387 gtkwin = g_malloc0(sizeof(GaimGtkWindow)); |
4359 | 4388 |
4389 win->ui_data = gtkwin; | |
4390 | |
4391 /* Create the window. */ | |
4392 gtkwin->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
4393 gtk_window_set_role(GTK_WINDOW(gtkwin->window), "conversation"); | |
9614 | 4394 gtk_window_set_resizable(GTK_WINDOW(gtkwin->window), TRUE); |
4510
4c394222c732
[gaim-migrate @ 4786]
Christian Hammond <chipx86@chipx86.com>
parents:
4505
diff
changeset
|
4395 gtk_container_set_border_width(GTK_CONTAINER(gtkwin->window), 0); |
9614 | 4396 GTK_WINDOW(gtkwin->window)->allow_shrink = TRUE; |
4359 | 4397 |
4398 g_signal_connect(G_OBJECT(gtkwin->window), "delete_event", | |
4399 G_CALLBACK(close_win_cb), win); | |
4400 | |
4401 /* Create the notebook. */ | |
4402 gtkwin->notebook = gtk_notebook_new(); | |
4403 | |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4404 pos = gaim_prefs_get_int("/gaim/gtk/conversations/tab_side"); |
4359 | 4405 |
4406 #if 0 | |
4407 gtk_notebook_set_tab_hborder(GTK_NOTEBOOK(gtkwin->notebook), 0); | |
4408 gtk_notebook_set_tab_vborder(GTK_NOTEBOOK(gtkwin->notebook), 0); | |
4409 #endif | |
4410 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkwin->notebook), pos); | |
4411 gtk_notebook_set_scrollable(GTK_NOTEBOOK(gtkwin->notebook), TRUE); | |
4412 gtk_notebook_popup_enable(GTK_NOTEBOOK(gtkwin->notebook)); | |
4818 | 4413 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), FALSE); |
4414 | |
4359 | 4415 gtk_widget_show(gtkwin->notebook); |
4416 | |
8189 | 4417 g_signal_connect(G_OBJECT(gtkwin->notebook), "switch_page", |
4418 G_CALLBACK(before_switch_conv_cb), win); | |
4359 | 4419 g_signal_connect_after(G_OBJECT(gtkwin->notebook), "switch_page", |
4420 G_CALLBACK(switch_conv_cb), win); | |
4421 | |
4422 /* Setup the tab drag and drop signals. */ | |
4486 | 4423 gtk_widget_add_events(gtkwin->notebook, |
4424 GDK_BUTTON1_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); | |
4425 g_signal_connect(G_OBJECT(gtkwin->notebook), "button_press_event", | |
4572
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4426 G_CALLBACK(notebook_press_cb), win); |
4486 | 4427 g_signal_connect(G_OBJECT(gtkwin->notebook), "button_release_event", |
4572
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4428 G_CALLBACK(notebook_release_cb), win); |
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4429 |
4359 | 4430 testidea = gtk_vbox_new(FALSE, 0); |
4572
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4431 |
4359 | 4432 /* Setup the menubar. */ |
4433 menubar = setup_menubar(win); | |
4434 gtk_box_pack_start(GTK_BOX(testidea), menubar, FALSE, TRUE, 0); | |
4435 | |
4436 gtk_box_pack_start(GTK_BOX(testidea), gtkwin->notebook, TRUE, TRUE, 0); | |
4437 | |
4438 gtk_container_add(GTK_CONTAINER(gtkwin->window), testidea); | |
4439 | |
4440 gtk_widget_show(testidea); | |
4441 } | |
4442 | |
4443 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4444 gaim_gtk_destroy_window(GaimConvWindow *win) |
4359 | 4445 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4446 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4447 |
4448 gtk_widget_destroy(gtkwin->window); | |
4449 | |
4630 | 4450 g_object_unref(G_OBJECT(gtkwin->menu.item_factory)); |
4451 | |
4359 | 4452 g_free(gtkwin); |
4453 win->ui_data = NULL; | |
4454 } | |
4455 | |
4456 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4457 gaim_gtk_show(GaimConvWindow *win) |
4359 | 4458 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4459 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4460 |
4461 gtk_widget_show(gtkwin->window); | |
4462 } | |
4463 | |
4464 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4465 gaim_gtk_hide(GaimConvWindow *win) |
4359 | 4466 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4467 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4468 |
4469 gtk_widget_hide(gtkwin->window); | |
4470 } | |
4471 | |
4472 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4473 gaim_gtk_raise(GaimConvWindow *win) |
4359 | 4474 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4475 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4476 |
9728 | 4477 gtk_widget_show(gtkwin->window); |
4478 gtk_window_deiconify(GTK_WINDOW(gtkwin->window)); | |
4479 gdk_window_raise(gtkwin->window->window); | |
4359 | 4480 } |
4481 | |
4482 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4483 gaim_gtk_flash(GaimConvWindow *win) |
4359 | 4484 { |
4485 #ifdef _WIN32 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4486 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4487 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4488 wgaim_conv_im_blink(gtkwin->window); |
4359 | 4489 #endif |
4490 } | |
4491 | |
4492 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4493 gaim_gtk_switch_conversation(GaimConvWindow *win, unsigned int index) |
4359 | 4494 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4495 GaimGtkWindow *gtkwin; |
4359 | 4496 |
4497 gtkwin = GAIM_GTK_WINDOW(win); | |
4498 | |
4499 gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkwin->notebook), index); | |
4500 } | |
4501 | |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4502 static const GtkTargetEntry te[] = |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4503 { |
10145 | 4504 GTK_IMHTML_DND_TARGETS, |
4505 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, GTK_IMHTML_DRAG_NUM}, | |
4506 {"application/x-im-contact", 0, GTK_IMHTML_DRAG_NUM + 1} | |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4507 }; |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4508 |
4359 | 4509 static void |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4510 gaim_gtk_add_conversation(GaimConvWindow *win, GaimConversation *conv) |
4359 | 4511 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4512 GaimGtkWindow *gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4513 GaimGtkConversation *gtkconv, *focus_gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4514 GaimConversation *focus_conv; |
4359 | 4515 GtkWidget *pane = NULL; |
4516 GtkWidget *tab_cont; | |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4517 GtkWidget *tabby, *menu_tabby; |
10053
a4ceacb1816d
[gaim-migrate @ 11016]
Luke Schierer <lschiere@pidgin.im>
parents:
10025
diff
changeset
|
4518 GtkWidget *close_image; |
4359 | 4519 gboolean new_ui; |
4383
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4520 GaimConversationType conv_type; |
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4521 const char *name; |
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4522 |
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4523 name = gaim_conversation_get_name(conv); |
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4524 conv_type = gaim_conversation_get_type(conv); |
f7a84034f97f
[gaim-migrate @ 4649]
Christian Hammond <chipx86@chipx86.com>
parents:
4382
diff
changeset
|
4525 gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 4526 |
4527 if (conv->ui_data != NULL) { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4528 gtkconv = (GaimGtkConversation *)conv->ui_data; |
4359 | 4529 |
4530 tab_cont = gtkconv->tab_cont; | |
4531 | |
4532 new_ui = FALSE; | |
4533 } | |
4534 else { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4535 gtkconv = g_malloc0(sizeof(GaimGtkConversation)); |
4359 | 4536 conv->ui_data = gtkconv; |
4537 | |
4538 /* Setup some initial variables. */ | |
9749 | 4539 gtkconv->sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); |
4359 | 4540 gtkconv->tooltips = gtk_tooltips_new(); |
4541 | |
7879 | 4542 if (conv_type == GAIM_CONV_IM) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4543 gtkconv->u.im = g_malloc0(sizeof(GaimGtkImPane)); |
4359 | 4544 gtkconv->u.im->a_virgin = TRUE; |
4545 | |
4546 pane = setup_im_pane(conv); | |
4547 } | |
7879 | 4548 else if (conv_type == GAIM_CONV_CHAT) { |
4549 gtkconv->u.chat = g_malloc0(sizeof(GaimGtkChatPane)); | |
4550 | |
4551 pane = setup_chat_pane(conv); | |
4552 } | |
4359 | 4553 |
4554 if (pane == NULL) { | |
4572
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4555 if (conv_type == GAIM_CONV_CHAT) g_free(gtkconv->u.chat); |
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4556 else if (conv_type == GAIM_CONV_IM) g_free(gtkconv->u.im); |
4359 | 4557 |
4558 g_free(gtkconv); | |
4559 conv->ui_data = NULL; | |
4560 | |
4561 return; | |
4562 } | |
4563 | |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4564 /* Setup drag-and-drop */ |
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4565 gtk_drag_dest_set(pane, |
9300 | 4566 GTK_DEST_DEFAULT_MOTION | |
4567 GTK_DEST_DEFAULT_DROP, | |
4568 te, sizeof(te) / sizeof(GtkTargetEntry), | |
4569 GDK_ACTION_COPY); | |
4570 gtk_drag_dest_set(pane, | |
4571 GTK_DEST_DEFAULT_MOTION | | |
4572 GTK_DEST_DEFAULT_DROP, | |
4573 te, sizeof(te) / sizeof(GtkTargetEntry), | |
4574 GDK_ACTION_COPY); | |
4575 gtk_drag_dest_set(gtkconv->imhtml, 0, | |
4576 te, sizeof(te) / sizeof(GtkTargetEntry), | |
4577 GDK_ACTION_COPY); | |
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
4578 |
9300 | 4579 gtk_drag_dest_set(gtkconv->entry, 0, |
4580 te, sizeof(te) / sizeof(GtkTargetEntry), | |
4581 GDK_ACTION_COPY); | |
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
4582 |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4583 g_signal_connect(G_OBJECT(pane), "drag_data_received", |
9300 | 4584 G_CALLBACK(conv_dnd_recv), conv); |
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4585 g_signal_connect(G_OBJECT(gtkconv->imhtml), "drag_data_received", |
9300 | 4586 G_CALLBACK(conv_dnd_recv), conv); |
8105 | 4587 g_signal_connect(G_OBJECT(gtkconv->entry), "drag_data_received", |
9300 | 4588 G_CALLBACK(conv_dnd_recv), conv); |
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
4589 |
4359 | 4590 /* Setup the container for the tab. */ |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4591 gtkconv->tab_cont = tab_cont = gtk_vbox_new(FALSE, 6); |
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4592 gtk_container_set_border_width(GTK_CONTAINER(tab_cont), 6); |
4359 | 4593 gtk_container_add(GTK_CONTAINER(tab_cont), pane); |
4594 gtk_widget_show(pane); | |
4595 | |
4596 new_ui = TRUE; | |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
4597 |
4359 | 4598 gtkconv->make_sound = TRUE; |
5902
6889b89cab90
[gaim-migrate @ 6334]
Christian Hammond <chipx86@chipx86.com>
parents:
5901
diff
changeset
|
4599 |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
4600 gtkconv->show_formatting_toolbar = gaim_prefs_get_bool( |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
4601 "/gaim/gtk/conversations/show_formatting_toolbar"); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
4602 |
8329
9dd7c75ed433
[gaim-migrate @ 9053]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
4603 if (gtkconv->show_formatting_toolbar) |
9dd7c75ed433
[gaim-migrate @ 9053]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
4604 gtk_widget_show(gtkconv->toolbar); |
10190 | 4605 else |
4606 gtk_widget_hide(gtkconv->toolbar); | |
8329
9dd7c75ed433
[gaim-migrate @ 9053]
Christian Hammond <chipx86@chipx86.com>
parents:
8319
diff
changeset
|
4607 |
9188 | 4608 gtkconv->show_timestamps = gaim_prefs_get_bool( |
4609 "/gaim/gtk/conversations/show_timestamps"); | |
4610 | |
4611 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), | |
4612 gtkconv->show_timestamps); | |
4613 | |
8176 | 4614 g_signal_connect_swapped(G_OBJECT(pane), "focus", |
9080 | 4615 G_CALLBACK(gtk_widget_grab_focus), |
4616 gtkconv->entry); | |
4359 | 4617 } |
4618 | |
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4619 gtkconv->tabby = tabby = gtk_hbox_new(FALSE, 6); |
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
4620 gtkconv->menu_tabby = menu_tabby = gtk_hbox_new(FALSE, 6); |
4359 | 4621 |
4622 /* Close button. */ | |
4623 gtkconv->close = gtk_button_new(); | |
4624 gtk_widget_set_size_request(GTK_WIDGET(gtkconv->close), 16, 16); | |
7446
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4625 gtk_button_set_relief(GTK_BUTTON(gtkconv->close), GTK_RELIEF_NONE); |
10053
a4ceacb1816d
[gaim-migrate @ 11016]
Luke Schierer <lschiere@pidgin.im>
parents:
10025
diff
changeset
|
4626 close_image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); |
a4ceacb1816d
[gaim-migrate @ 11016]
Luke Schierer <lschiere@pidgin.im>
parents:
10025
diff
changeset
|
4627 gtk_widget_show(close_image); |
a4ceacb1816d
[gaim-migrate @ 11016]
Luke Schierer <lschiere@pidgin.im>
parents:
10025
diff
changeset
|
4628 gtk_container_add(GTK_CONTAINER(gtkconv->close), close_image); |
4359 | 4629 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close, |
4572
06084165a966
[gaim-migrate @ 4853]
Christian Hammond <chipx86@chipx86.com>
parents:
4571
diff
changeset
|
4630 _("Close conversation"), NULL); |
4359 | 4631 |
4632 g_signal_connect(G_OBJECT(gtkconv->close), "clicked", | |
4571
51e988d015ed
[gaim-migrate @ 4852]
Christian Hammond <chipx86@chipx86.com>
parents:
4561
diff
changeset
|
4633 G_CALLBACK(close_conv_cb), conv); |
4359 | 4634 |
7446
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4635 /* |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4636 * I love Galeon. They have a fix for that stupid annoying visible |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4637 * border bug. I love you guys! -- ChipX86 |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4638 */ |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4639 g_signal_connect(G_OBJECT(gtkconv->close), "state_changed", |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4640 G_CALLBACK(tab_close_button_state_changed_cb), NULL); |
064c697cc223
[gaim-migrate @ 8057]
Christian Hammond <chipx86@chipx86.com>
parents:
7440
diff
changeset
|
4641 |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
4642 /* Status icon. */ |
6440 | 4643 gtkconv->icon = gtk_image_new(); |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4644 gtkconv->menu_icon = gtk_image_new(); |
6440 | 4645 update_tab_icon(conv); |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
4646 |
4359 | 4647 /* Tab label. */ |
4648 gtkconv->tab_label = gtk_label_new(gaim_conversation_get_title(conv)); | |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4649 gtkconv->menu_label = gtk_label_new(gaim_conversation_get_title(conv)); |
4359 | 4650 #if 0 |
4651 gtk_misc_set_alignment(GTK_MISC(gtkconv->tab_label), 0.00, 0.5); | |
4652 gtk_misc_set_padding(GTK_MISC(gtkconv->tab_label), 4, 0); | |
4653 #endif | |
4654 | |
4655 /* Pack it all together. */ | |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
4656 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->icon, FALSE, FALSE, 0); |
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4657 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_icon, |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4658 FALSE, FALSE, 0); |
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
4659 |
8946 | 4660 gtk_widget_show_all(gtkconv->icon); |
4661 gtk_widget_show_all(gtkconv->menu_icon); | |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
4662 |
4359 | 4663 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0); |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4664 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_label, TRUE, TRUE, 0); |
4445 | 4665 gtk_widget_show(gtkconv->tab_label); |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4666 gtk_widget_show(gtkconv->menu_label); |
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4667 gtk_misc_set_alignment(GTK_MISC(gtkconv->menu_label), 0, 0); |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
4668 |
4445 | 4669 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->close, FALSE, FALSE, 0); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4670 if (gaim_prefs_get_bool("/gaim/gtk/conversations/close_on_tabs")) |
10053
a4ceacb1816d
[gaim-migrate @ 11016]
Luke Schierer <lschiere@pidgin.im>
parents:
10025
diff
changeset
|
4671 gtk_widget_show(gtkconv->close); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4672 |
4445 | 4673 gtk_widget_show(tabby); |
6771
8eebba08b44b
[gaim-migrate @ 7308]
Christian Hammond <chipx86@chipx86.com>
parents:
6760
diff
changeset
|
4674 gtk_widget_show(menu_tabby); |
4359 | 4675 |
7143 | 4676 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
4677 gaim_gtkconv_update_buddy_icon(conv); | |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
4678 |
9297 | 4679 /* Add this pane to the conversation's notebook. */ |
9606 | 4680 gtk_notebook_append_page_menu(GTK_NOTEBOOK(gtkwin->notebook), tab_cont, tabby, menu_tabby); |
4359 | 4681 |
4682 gtk_widget_show(tab_cont); | |
4683 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4684 if (gaim_conv_window_get_conversation_count(win) == 1) { |
4818 | 4685 /* Er, bug in notebooks? Switch to the page manually. */ |
4359 | 4686 gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkwin->notebook), 0); |
4851 | 4687 |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4688 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4689 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")); |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4690 } |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4691 else |
4818 | 4692 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), TRUE); |
4359 | 4693 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4694 focus_conv = g_list_nth_data(gaim_conv_window_get_conversations(win), |
5204 | 4695 gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkwin->notebook))); |
4696 focus_gtkconv = GAIM_GTK_CONVERSATION(focus_conv); | |
4697 gtk_widget_grab_focus(focus_gtkconv->entry); | |
4359 | 4698 |
4699 if (!new_ui) | |
4700 g_object_unref(gtkconv->tab_cont); | |
4701 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4702 if (gaim_conv_window_get_conversation_count(win) == 1) |
4685 | 4703 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); |
4359 | 4704 } |
4705 | |
4706 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4707 gaim_gtk_remove_conversation(GaimConvWindow *win, GaimConversation *conv) |
4359 | 4708 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4709 GaimGtkWindow *gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4710 GaimGtkConversation *gtkconv; |
4359 | 4711 unsigned int index; |
4818 | 4712 GaimConversationType conv_type; |
4713 | |
4714 conv_type = gaim_conversation_get_type(conv); | |
4359 | 4715 index = gaim_conversation_get_index(conv); |
4716 | |
4717 gtkwin = GAIM_GTK_WINDOW(win); | |
4718 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
4719 | |
4720 g_object_ref(gtkconv->tab_cont); | |
4721 gtk_object_sink(GTK_OBJECT(gtkconv->tab_cont)); | |
4722 | |
4723 gtk_notebook_remove_page(GTK_NOTEBOOK(gtkwin->notebook), index); | |
4724 | |
4818 | 4725 /* go back to tabless if need be */ |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4726 if (gaim_conv_window_get_conversation_count(win) <= 2) { |
4818 | 4727 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(gtkwin->notebook), |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4728 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")); |
4818 | 4729 } |
4730 | |
4731 | |
4359 | 4732 /* If this window is setup with an inactive gc, regenerate the menu. */ |
4818 | 4733 if (conv_type == GAIM_CONV_IM && |
4359 | 4734 gaim_conversation_get_gc(conv) == NULL) { |
4735 | |
4360
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
4736 generate_send_as_items(win, conv); |
4359 | 4737 } |
4738 } | |
4739 | |
4740 static void | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4741 gaim_gtk_move_conversation(GaimConvWindow *win, GaimConversation *conv, |
4359 | 4742 unsigned int new_index) |
4743 { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4744 GaimGtkWindow *gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4745 GaimGtkConversation *gtkconv; |
4359 | 4746 |
4747 gtkwin = GAIM_GTK_WINDOW(win); | |
4748 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
4749 | |
4415
c90039137172
[gaim-migrate @ 4688]
Christian Hammond <chipx86@chipx86.com>
parents:
4409
diff
changeset
|
4750 if (new_index > gaim_conversation_get_index(conv)) |
c90039137172
[gaim-migrate @ 4688]
Christian Hammond <chipx86@chipx86.com>
parents:
4409
diff
changeset
|
4751 new_index--; |
c90039137172
[gaim-migrate @ 4688]
Christian Hammond <chipx86@chipx86.com>
parents:
4409
diff
changeset
|
4752 |
4359 | 4753 gtk_notebook_reorder_child(GTK_NOTEBOOK(gtkwin->notebook), |
4754 gtkconv->tab_cont, new_index); | |
4755 } | |
4756 | |
4757 static int | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4758 gaim_gtk_get_active_index(const GaimConvWindow *win) |
4359 | 4759 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4760 GaimGtkWindow *gtkwin; |
5680
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4761 int index; |
4359 | 4762 |
4763 gtkwin = GAIM_GTK_WINDOW(win); | |
4764 | |
5680
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4765 index = gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkwin->notebook)); |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4766 |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4767 /* |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4768 * A fix, because the first conversation may be active, but not |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4769 * appear in the notebook just yet. -- ChipX86 |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4770 */ |
71cc0d5376c2
[gaim-migrate @ 6098]
Christian Hammond <chipx86@chipx86.com>
parents:
5678
diff
changeset
|
4771 return (index == -1 ? 0 : index); |
4359 | 4772 } |
4773 | |
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4774 static gboolean |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4775 gaim_gtk_has_focus(GaimConvWindow *win) |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4776 { |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4777 GaimGtkWindow *gtkwin; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4778 gboolean has_focus = FALSE; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4779 |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4780 gtkwin = GAIM_GTK_WINDOW(win); |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4781 g_object_get(G_OBJECT(gtkwin->window), "has-toplevel-focus", &has_focus, NULL); |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4782 |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4783 return has_focus; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4784 } |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4785 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4786 static GaimConvWindowUiOps window_ui_ops = |
4359 | 4787 { |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
4788 gaim_gtk_conversations_get_conv_ui_ops, |
4359 | 4789 gaim_gtk_new_window, |
4790 gaim_gtk_destroy_window, | |
4791 gaim_gtk_show, | |
4792 gaim_gtk_hide, | |
4793 gaim_gtk_raise, | |
4794 gaim_gtk_flash, | |
4795 gaim_gtk_switch_conversation, | |
4796 gaim_gtk_add_conversation, | |
4797 gaim_gtk_remove_conversation, | |
4798 gaim_gtk_move_conversation, | |
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4799 gaim_gtk_get_active_index, |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4800 gaim_gtk_has_focus |
4359 | 4801 }; |
4802 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4803 GaimConvWindowUiOps * |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
4804 gaim_gtk_conversations_get_win_ui_ops(void) |
4359 | 4805 { |
4465
6e37eb000b7a
[gaim-migrate @ 4740]
Christian Hammond <chipx86@chipx86.com>
parents:
4454
diff
changeset
|
4806 return &window_ui_ops; |
4359 | 4807 } |
4808 | |
4809 /************************************************************************** | |
4465
6e37eb000b7a
[gaim-migrate @ 4740]
Christian Hammond <chipx86@chipx86.com>
parents:
4454
diff
changeset
|
4810 * Conversation UI operations |
4359 | 4811 **************************************************************************/ |
4812 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4813 gaim_gtkconv_destroy(GaimConversation *conv) |
4359 | 4814 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4815 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
4359 | 4816 |
9504 | 4817 /* If the "Save Conversation" or "Save Icon" dialogs are open then close them */ |
4818 gaim_request_close_with_handle(conv); | |
4359 | 4819 |
4571
51e988d015ed
[gaim-migrate @ 4852]
Christian Hammond <chipx86@chipx86.com>
parents:
4561
diff
changeset
|
4820 gtk_widget_destroy(gtkconv->tab_cont); |
4892 | 4821 g_object_unref(gtkconv->tab_cont); |
4571
51e988d015ed
[gaim-migrate @ 4852]
Christian Hammond <chipx86@chipx86.com>
parents:
4561
diff
changeset
|
4822 |
4359 | 4823 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
4755 | 4824 if (gtkconv->u.im->icon_timer != 0) |
4825 g_source_remove(gtkconv->u.im->icon_timer); | |
4826 | |
4359 | 4827 if (gtkconv->u.im->anim != NULL) |
4793 | 4828 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); |
4359 | 4829 |
4830 g_free(gtkconv->u.im); | |
4831 } | |
4832 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { | |
4833 g_free(gtkconv->u.chat); | |
4834 } | |
4835 | |
4633 | 4836 gtk_object_sink(GTK_OBJECT(gtkconv->tooltips)); |
4837 | |
4359 | 4838 g_free(gtkconv); |
4839 } | |
4840 | |
4841 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4842 gaim_gtkconv_write_im(GaimConversation *conv, const char *who, |
6982 | 4843 const char *message, GaimMessageFlags flags, |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4844 time_t mtime) |
4359 | 4845 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4846 GaimGtkConversation *gtkconv; |
8630 | 4847 GaimConvWindow *gaimwin; |
4848 GaimGtkWindow *gtkwin; | |
4849 gboolean has_focus; | |
4359 | 4850 |
4851 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
8630 | 4852 gaimwin = gaim_conversation_get_window(conv); |
4853 gtkwin = GAIM_GTK_WINDOW(gaimwin); | |
4854 | |
4855 g_object_get(G_OBJECT(gtkwin->window), "has-toplevel-focus", &has_focus, NULL); | |
4359 | 4856 |
6621 | 4857 if (!(flags & GAIM_MESSAGE_NO_LOG) && |
9301 | 4858 gaim_prefs_get_bool("/gaim/gtk/conversations/im/raise_on_events")) { |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4859 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4860 gaim_conv_window_raise(gaim_conversation_get_window(conv)); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4861 } |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4862 |
4382
76223649765b
[gaim-migrate @ 4648]
Christian Hammond <chipx86@chipx86.com>
parents:
4378
diff
changeset
|
4863 /* Play a sound, if specified in prefs. */ |
8630 | 4864 if (gtkconv->make_sound && !((gaim_conv_window_get_active_conversation(gaimwin) == conv) && |
8633 | 4865 !gaim_prefs_get_bool("/gaim/gtk/sound/conv_focus") && has_focus)) { |
6621 | 4866 if (flags & GAIM_MESSAGE_RECV) { |
4359 | 4867 if (gtkconv->u.im->a_virgin && |
5820 | 4868 gaim_prefs_get_bool("/gaim/gtk/sound/enabled/first_im_recv")) { |
4359 | 4869 |
4561 | 4870 gaim_sound_play_event(GAIM_SOUND_FIRST_RECEIVE); |
4359 | 4871 } |
4872 else | |
4561 | 4873 gaim_sound_play_event(GAIM_SOUND_RECEIVE); |
4359 | 4874 } |
4875 else { | |
4561 | 4876 gaim_sound_play_event(GAIM_SOUND_SEND); |
4359 | 4877 } |
4878 } | |
4879 | |
4880 gtkconv->u.im->a_virgin = FALSE; | |
4881 | |
6982 | 4882 gaim_conversation_write(conv, who, message, flags, mtime); |
4359 | 4883 } |
4884 | |
4885 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4886 gaim_gtkconv_write_chat(GaimConversation *conv, const char *who, |
6621 | 4887 const char *message, GaimMessageFlags flags, time_t mtime) |
4359 | 4888 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4889 GaimGtkConversation *gtkconv; |
8630 | 4890 GaimConvWindow *gaimwin; |
4891 GaimGtkWindow *gtkwin; | |
4892 gboolean has_focus; | |
4359 | 4893 |
4894 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
8630 | 4895 gaimwin = gaim_conversation_get_window(conv); |
4896 gtkwin = GAIM_GTK_WINDOW(gaimwin); | |
4897 | |
4898 g_object_get(G_OBJECT(gtkwin->window), "has-toplevel-focus", &has_focus, NULL); | |
4359 | 4899 |
4382
76223649765b
[gaim-migrate @ 4648]
Christian Hammond <chipx86@chipx86.com>
parents:
4378
diff
changeset
|
4900 /* Play a sound, if specified in prefs. */ |
8630 | 4901 if (gtkconv->make_sound && !((gaim_conv_window_get_active_conversation(gaimwin) == conv) && |
9704 | 4902 !gaim_prefs_get_bool("/gaim/gtk/sound/conv_focus") && has_focus) && |
4903 !(flags & GAIM_MESSAGE_DELAYED) && | |
4904 !(flags & GAIM_MESSAGE_SYSTEM)) { | |
4905 | |
6621 | 4906 if (!(flags & GAIM_MESSAGE_WHISPER) && (flags & GAIM_MESSAGE_SEND)) |
4561 | 4907 gaim_sound_play_event(GAIM_SOUND_CHAT_YOU_SAY); |
9704 | 4908 else if (flags & GAIM_MESSAGE_RECV) { |
6621 | 4909 if ((flags & GAIM_MESSAGE_NICK) && |
9584 | 4910 gaim_prefs_get_bool("/gaim/gtk/sound/enabled/nick_said")) { |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4911 |
4561 | 4912 gaim_sound_play_event(GAIM_SOUND_CHAT_NICK); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4913 } |
4359 | 4914 else |
4561 | 4915 gaim_sound_play_event(GAIM_SOUND_CHAT_SAY); |
4359 | 4916 } |
4917 } | |
4918 | |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4919 if (gaim_prefs_get_bool("/gaim/gtk/conversations/chat/color_nicks")) |
6621 | 4920 flags |= GAIM_MESSAGE_COLORIZE; |
4359 | 4921 |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4922 /* Raise the window, if specified in prefs. */ |
6621 | 4923 if (!(flags & GAIM_MESSAGE_NO_LOG) && |
9150 | 4924 /* we may want to change this */ |
9301 | 4925 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/raise_on_events")) { |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4926 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4927 gaim_conv_window_raise(gaim_conversation_get_window(conv)); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4928 } |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4929 |
6982 | 4930 gaim_conversation_write(conv, who, message, flags, mtime); |
4359 | 4931 } |
4932 | |
4933 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4934 gaim_gtkconv_write_conv(GaimConversation *conv, const char *who, |
6982 | 4935 const char *message, GaimMessageFlags flags, |
4359 | 4936 time_t mtime) |
4937 { | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4938 GaimGtkConversation *gtkconv; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4939 GaimConvWindow *win; |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
4940 GaimConnection *gc; |
4359 | 4941 int gtk_font_options = 0; |
7440 | 4942 char buf[BUF_LONG]; |
4359 | 4943 char buf2[BUF_LONG]; |
4944 char mdate[64]; | |
4945 char color[10]; | |
4946 char *str; | |
4947 char *with_font_tag; | |
4896 | 4948 char *sml_attrib = NULL; |
6982 | 4949 size_t length = strlen(message) + 1; |
4895 | 4950 |
4359 | 4951 gtkconv = GAIM_GTK_CONVERSATION(conv); |
4952 gc = gaim_conversation_get_gc(conv); | |
4953 | |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4954 win = gaim_conversation_get_window(conv); |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4955 |
9301 | 4956 if (!(flags & GAIM_MESSAGE_NO_LOG) && |
4957 ((gaim_conversation_get_type(conv) == GAIM_CONV_CHAT && | |
4958 gaim_prefs_get_bool("/gaim/gtk/conversations/chat/raise_on_events")) || | |
4959 (gaim_conversation_get_type(conv) == GAIM_CONV_IM && | |
4960 gaim_prefs_get_bool("/gaim/gtk/conversations/im/raise_on_events")))) { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4961 gaim_conv_window_show(win); |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4962 } |
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4963 |
8677 | 4964 if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) |
4965 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", 0); | |
4966 | |
5133 | 4967 if(time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */ |
4968 strftime(mdate, sizeof(mdate), "%Y-%m-%d %H:%M:%S", localtime(&mtime)); | |
4969 else | |
4970 strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime)); | |
4359 | 4971 |
4896 | 4972 if(gc) |
9699 | 4973 sml_attrib = g_strdup_printf("sml=\"%s\"", |
4974 gaim_account_get_protocol_name(conv->account)); | |
7440 | 4975 |
4359 | 4976 gtk_font_options ^= GTK_IMHTML_NO_COMMENTS; |
4977 | |
9049 | 4978 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_colors")) |
4979 gtk_font_options ^= GTK_IMHTML_NO_COLOURS; | |
4980 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_fonts")) | |
4981 gtk_font_options ^= GTK_IMHTML_NO_FONTS; | |
4982 if (gaim_prefs_get_bool("/gaim/gtk/conversations/ignore_font_sizes")) | |
4983 gtk_font_options ^= GTK_IMHTML_NO_SIZES; | |
4359 | 4984 |
7956 | 4985 /* this is gonna crash one day, I can feel it. */ |
4986 if (GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(gaim_account_get_protocol_id(conv->account)))->options & | |
7431 | 4987 OPT_PROTO_USE_POINTSIZE) { |
5367 | 4988 gtk_font_options ^= GTK_IMHTML_USE_POINTSIZE; |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4989 } |
4359 | 4990 |
6621 | 4991 if (flags & GAIM_MESSAGE_SYSTEM) { |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4992 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")) |
8380 | 4993 g_snprintf(buf, BUF_LONG, "<FONT SIZE=\"2\">(%s)</FONT> <B>%s</B>", |
7431 | 4994 mdate, message); |
4359 | 4995 else |
4996 g_snprintf(buf, BUF_LONG, "<B>%s</B>", message); | |
7440 | 4997 |
4359 | 4998 g_snprintf(buf2, sizeof(buf2), |
8690 | 4999 "<FONT %s><FONT SIZE=\"2\"><!--(%s) --></FONT><B>%s</B></FONT>", |
7850 | 5000 sml_attrib, mdate, message); |
7440 | 5001 |
8962 | 5002 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, 0); |
7440 | 5003 |
7583 | 5004 /* Add the message to a conversations scrollback buffer */ |
5005 conv->history = g_string_append(conv->history, buf); | |
5006 conv->history = g_string_append(conv->history, "<BR>\n"); | |
7440 | 5007 |
8722 | 5008 } else if (flags & GAIM_MESSAGE_ERROR) { |
5009 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")) | |
9627 | 5010 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"#ff0000\"><FONT SIZE=\"2\">(%s)</FONT> <B>%s</B></FONT>", |
8722 | 5011 mdate, message); |
5012 else | |
5013 g_snprintf(buf, BUF_LONG, "<FONT COLOR=\"#ff0000\"><B>%s</B></FONT>", message); | |
9554 | 5014 |
8722 | 5015 g_snprintf(buf2, sizeof(buf2), |
9627 | 5016 "<FONT COLOR=\"#ff0000\"><FONT %s><FONT SIZE=\"2\"><!--(%s) --></FONT><B>%s</B></FONT></FONT>", |
8722 | 5017 sml_attrib, mdate, message); |
9554 | 5018 |
8962 | 5019 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, 0); |
5020 | |
8722 | 5021 /* Add the message to a conversations scrollback buffer */ |
5022 conv->history = g_string_append(conv->history, buf); | |
5023 conv->history = g_string_append(conv->history, "<BR>\n"); | |
7431 | 5024 } else if (flags & GAIM_MESSAGE_NO_LOG) { |
4359 | 5025 g_snprintf(buf, BUF_LONG, |
8690 | 5026 "<B><FONT %s COLOR=\"#777777\">%s</FONT></B>", |
7850 | 5027 sml_attrib, message); |
7440 | 5028 |
8962 | 5029 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf, 0); |
4359 | 5030 } |
5031 else { | |
4895 | 5032 char *new_message = g_memdup(message, length); |
9613 | 5033 char *who_escaped = (who ? g_markup_escape_text(who, strlen(who)) : g_strdup("")); |
7440 | 5034 |
6621 | 5035 if (flags & GAIM_MESSAGE_WHISPER) { |
4359 | 5036 str = g_malloc(1024); |
7440 | 5037 |
4359 | 5038 /* If we're whispering, it's not an autoresponse. */ |
7564 | 5039 if (gaim_message_meify(new_message, length)) { |
8908 | 5040 g_snprintf(str, 1024, "***%s", who_escaped); |
4359 | 5041 strcpy(color, "#6C2585"); |
5042 } | |
5043 else { | |
8908 | 5044 g_snprintf(str, 1024, "*%s*:", who_escaped); |
4359 | 5045 strcpy(color, "#00FF00"); |
5046 } | |
7440 | 5047 } |
4359 | 5048 else { |
7564 | 5049 if (gaim_message_meify(new_message, length)) { |
4359 | 5050 str = g_malloc(1024); |
7440 | 5051 |
6621 | 5052 if (flags & GAIM_MESSAGE_AUTO_RESP) |
8908 | 5053 g_snprintf(str, 1024, "%s ***%s", AUTO_RESPONSE, who_escaped); |
4359 | 5054 else |
8908 | 5055 g_snprintf(str, 1024, "***%s", who_escaped); |
7440 | 5056 |
6621 | 5057 if (flags & GAIM_MESSAGE_NICK) |
4359 | 5058 strcpy(color, "#AF7F00"); |
5059 else | |
5060 strcpy(color, "#062585"); | |
5061 } | |
5062 else { | |
5063 str = g_malloc(1024); | |
6621 | 5064 if (flags & GAIM_MESSAGE_AUTO_RESP) |
8908 | 5065 g_snprintf(str, 1024, "%s %s", who_escaped, AUTO_RESPONSE); |
4359 | 5066 else |
8908 | 5067 g_snprintf(str, 1024, "%s:", who_escaped); |
6621 | 5068 if (flags & GAIM_MESSAGE_NICK) |
4359 | 5069 strcpy(color, "#AF7F00"); |
6621 | 5070 else if (flags & GAIM_MESSAGE_RECV) { |
10108 | 5071 if (flags & GAIM_MESSAGE_COLORIZE) { |
5072 GtkStyle *style = gtk_widget_get_style(gtkconv->imhtml); | |
5073 GdkColor col = nick_colors[g_str_hash(who) % NUM_NICK_COLORS]; | |
5074 float scale = ((1-(LUMINANCE(style->base[GTK_STATE_NORMAL]) / LUMINANCE(style->white))) * | |
5075 (LUMINANCE(style->white)/MAX(MAX(col.red, col.blue), col.green))); | |
5076 if (scale > 1) { /* The colors are chosen to look fine on white; we should never have to darken */ | |
5077 col.red = col.red * scale; | |
5078 col.green = col.green * scale; | |
5079 col.blue = col.blue * scale; | |
5080 } | |
5081 | |
5082 g_snprintf(color, sizeof(color), "#%02X%02X%02X", | |
5083 col.red >> 8, col.green >> 8, col.blue >> 8); | |
5084 } else | |
7854 | 5085 strcpy(color, RECV_COLOR); |
4359 | 5086 } |
6621 | 5087 else if (flags & GAIM_MESSAGE_SEND) |
7854 | 5088 strcpy(color, SEND_COLOR); |
4359 | 5089 } |
8908 | 5090 |
5091 if(who_escaped) | |
5092 g_free(who_escaped); | |
4359 | 5093 } |
7440 | 5094 |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
5095 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")) |
4359 | 5096 g_snprintf(buf, BUF_LONG, |
8380 | 5097 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\">(%s)</FONT> " |
7431 | 5098 "<B>%s</B></FONT> ", color, |
5099 sml_attrib ? sml_attrib : "", mdate, str); | |
4359 | 5100 else |
5101 g_snprintf(buf, BUF_LONG, | |
7431 | 5102 "<FONT COLOR=\"%s\" %s><B>%s</B></FONT> ", color, |
5103 sml_attrib ? sml_attrib : "", str); | |
7440 | 5104 |
4359 | 5105 g_snprintf(buf2, BUF_LONG, |
8380 | 5106 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>" |
7431 | 5107 "<B>%s</B></FONT> ", |
5108 color, sml_attrib ? sml_attrib : "", mdate, str); | |
7440 | 5109 |
4359 | 5110 g_free(str); |
5111 | |
8962 | 5112 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), |
5113 buf2, 0); | |
4359 | 5114 |
4895 | 5115 if(gc){ |
4896 | 5116 char *pre = g_strdup_printf("<font %s>", sml_attrib ? sml_attrib : ""); |
4895 | 5117 char *post = "</font>"; |
5118 int pre_len = strlen(pre); | |
5119 int post_len = strlen(post); | |
7440 | 5120 |
4895 | 5121 with_font_tag = g_malloc(length + pre_len + post_len + 1); |
7440 | 5122 |
4895 | 5123 strcpy(with_font_tag, pre); |
5124 memcpy(with_font_tag + pre_len, new_message, length); | |
5125 strcpy(with_font_tag + pre_len + length, post); | |
7440 | 5126 |
4895 | 5127 length += pre_len + post_len; |
5128 g_free(pre); | |
5129 } | |
4608 | 5130 else |
4895 | 5131 with_font_tag = g_memdup(new_message, length); |
7440 | 5132 |
8962 | 5133 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), |
5134 with_font_tag, gtk_font_options); | |
7440 | 5135 |
8557 | 5136 conv->history = g_string_append(conv->history, buf); |
5137 conv->history = g_string_append(conv->history, new_message); | |
5138 conv->history = g_string_append(conv->history, "<BR>\n"); | |
7440 | 5139 |
5140 g_free(with_font_tag); | |
7447 | 5141 g_free(new_message); |
7440 | 5142 } |
5143 | |
6062 | 5144 |
5012 | 5145 if(sml_attrib) |
5146 g_free(sml_attrib); | |
4359 | 5147 } |
5148 | |
5149 static void | |
9846 | 5150 gaim_gtkconv_chat_add_user(GaimConversation *conv, const char *user, gboolean new_arrival) |
4359 | 5151 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5152 GaimConvChat *chat; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5153 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5154 GaimGtkChatPane *gtkchat; |
4359 | 5155 char tmp[BUF_LONG]; |
5156 int num_users; | |
5157 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5158 chat = GAIM_CONV_CHAT(conv); |
4359 | 5159 gtkconv = GAIM_GTK_CONVERSATION(conv); |
5160 gtkchat = gtkconv->u.chat; | |
5161 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5162 num_users = g_list_length(gaim_conv_chat_get_users(chat)); |
4359 | 5163 |
5164 g_snprintf(tmp, sizeof(tmp), | |
5165 ngettext("%d person in room", "%d people in room", | |
5166 num_users), | |
5167 num_users); | |
5168 | |
5169 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); | |
5170 | |
9846 | 5171 if (gtkconv->make_sound && new_arrival) |
4561 | 5172 gaim_sound_play_event(GAIM_SOUND_CHAT_JOIN); |
4359 | 5173 |
9554 | 5174 add_chat_buddy_common(conv, user); |
4359 | 5175 } |
5176 | |
5177 static void | |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5178 gaim_gtkconv_chat_add_users(GaimConversation *conv, GList *users) |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5179 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5180 GaimConvChat *chat; |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5181 GaimGtkConversation *gtkconv; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5182 GaimGtkChatPane *gtkchat; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5183 GList *l; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5184 char tmp[BUF_LONG]; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5185 int num_users; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5186 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5187 chat = GAIM_CONV_CHAT(conv); |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5188 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5189 gtkchat = gtkconv->u.chat; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5190 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5191 num_users = g_list_length(gaim_conv_chat_get_users(chat)); |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5192 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5193 g_snprintf(tmp, sizeof(tmp), |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5194 ngettext("%d person in room", "%d people in room", |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5195 num_users), |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5196 num_users); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5197 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5198 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5199 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5200 for (l = users; l != NULL; l = l->next) { |
9554 | 5201 add_chat_buddy_common(conv, (char *)l->data); |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5202 } |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5203 } |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5204 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5205 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5206 gaim_gtkconv_chat_rename_user(GaimConversation *conv, const char *old_name, |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5207 const char *new_name) |
4359 | 5208 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5209 GaimConvChat *chat; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5210 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5211 GaimGtkChatPane *gtkchat; |
4359 | 5212 GtkTreeIter iter; |
5213 GtkTreeModel *model; | |
5214 int f = 1; | |
5215 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5216 chat = GAIM_CONV_CHAT(conv); |
4359 | 5217 gtkconv = GAIM_GTK_CONVERSATION(conv); |
5218 gtkchat = gtkconv->u.chat; | |
5219 | |
9554 | 5220 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
5221 | |
5222 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
5223 return; | |
5224 | |
5225 while (f != 0) { | |
5226 char *val; | |
5227 | |
5228 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); | |
5229 | |
5230 if (!gaim_utf8_strcasecmp(old_name, val)) { | |
5231 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
5232 g_free(val); | |
4359 | 5233 break; |
5234 } | |
9554 | 5235 |
5236 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
5237 | |
5238 g_free(val); | |
4359 | 5239 } |
5240 | |
9554 | 5241 if (!gaim_conv_chat_find_user(chat, old_name)) |
4359 | 5242 return; |
5243 | |
9554 | 5244 add_chat_buddy_common(conv, new_name); |
4359 | 5245 } |
5246 | |
5247 static void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5248 gaim_gtkconv_chat_remove_user(GaimConversation *conv, const char *user) |
4359 | 5249 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5250 GaimConvChat *chat; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5251 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5252 GaimGtkChatPane *gtkchat; |
4359 | 5253 GtkTreeIter iter; |
5254 GtkTreeModel *model; | |
5255 char tmp[BUF_LONG]; | |
5256 int num_users; | |
5257 int f = 1; | |
5258 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5259 chat = GAIM_CONV_CHAT(conv); |
4359 | 5260 gtkconv = GAIM_GTK_CONVERSATION(conv); |
5261 gtkchat = gtkconv->u.chat; | |
5262 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5263 num_users = g_list_length(gaim_conv_chat_get_users(chat)) - 1; |
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5264 |
9554 | 5265 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
5266 | |
5267 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
5268 return; | |
5269 | |
5270 while (f != 0) { | |
5271 char *val; | |
5272 | |
5273 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); | |
5274 | |
5275 if (!gaim_utf8_strcasecmp(user, val)) { | |
5276 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
5277 g_free(val); | |
4359 | 5278 break; |
5279 } | |
9554 | 5280 |
5281 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
5282 | |
5283 g_free(val); | |
4359 | 5284 } |
5285 | |
9554 | 5286 if (!gaim_conv_chat_find_user(chat, user)) |
4359 | 5287 return; |
5288 | |
5289 g_snprintf(tmp, sizeof(tmp), | |
9554 | 5290 ngettext("%d person in room", "%d people in room", |
5291 num_users), num_users); | |
4359 | 5292 |
5293 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); | |
5294 | |
5295 if (gtkconv->make_sound) | |
4561 | 5296 gaim_sound_play_event(GAIM_SOUND_CHAT_LEAVE); |
4359 | 5297 } |
5298 | |
5299 static void | |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5300 gaim_gtkconv_chat_remove_users(GaimConversation *conv, GList *users) |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5301 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5302 GaimConvChat *chat; |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5303 GaimGtkConversation *gtkconv; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5304 GaimGtkChatPane *gtkchat; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5305 GtkTreeIter iter; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5306 GtkTreeModel *model; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5307 GList *l; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5308 char tmp[BUF_LONG]; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5309 int num_users; |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
5310 gboolean f; |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5311 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5312 chat = GAIM_CONV_CHAT(conv); |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5313 gtkconv = GAIM_GTK_CONVERSATION(conv); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5314 gtkchat = gtkconv->u.chat; |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5315 |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5316 num_users = g_list_length(gaim_conv_chat_get_users(chat)) - |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5317 g_list_length(users); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5318 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5319 for (l = users; l != NULL; l = l->next) { |
9554 | 5320 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
5321 | |
5322 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), | |
5323 &iter)) | |
5324 continue; | |
5325 | |
5326 do { | |
5327 char *val; | |
5328 | |
5329 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, | |
5330 CHAT_USERS_NAME_COLUMN, &val, -1); | |
5331 | |
9696 | 5332 if (!gaim_utf8_strcasecmp((char *)l->data, val)) { |
5333 #if GTK_CHECK_VERSION(2,2,0) | |
9554 | 5334 f = gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
9696 | 5335 #else |
5336 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
5337 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
5338 #endif | |
5339 } | |
9554 | 5340 else |
5341 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
5342 | |
5343 g_free(val); | |
5344 } while (f); | |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5345 } |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5346 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5347 g_snprintf(tmp, sizeof(tmp), |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5348 ngettext("%d person in room", "%d people in room", |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5349 num_users), num_users); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5350 |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5351 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5352 } |
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5353 |
9554 | 5354 static void |
5355 gaim_gtkconv_chat_update_user(GaimConversation *conv, const char *user) | |
5356 { | |
5357 GaimConvChat *chat; | |
5358 GaimGtkConversation *gtkconv; | |
5359 GaimGtkChatPane *gtkchat; | |
5360 GtkTreeIter iter; | |
5361 GtkTreeModel *model; | |
5362 int f = 1; | |
5363 | |
5364 chat = GAIM_CONV_CHAT(conv); | |
5365 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
5366 gtkchat = gtkconv->u.chat; | |
5367 | |
5368 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
5369 | |
5370 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
5371 return; | |
5372 | |
5373 while (f != 0) { | |
5374 char *val; | |
5375 | |
5376 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); | |
5377 | |
5378 if (!gaim_utf8_strcasecmp(user, val)) { | |
5379 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
5380 g_free(val); | |
5381 break; | |
5382 } | |
5383 | |
5384 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
5385 | |
5386 g_free(val); | |
5387 } | |
5388 | |
5389 if (!gaim_conv_chat_find_user(chat, user)) | |
5390 return; | |
5391 | |
5392 add_chat_buddy_common(conv, user); | |
5393 } | |
5394 | |
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5395 static gboolean |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5396 gaim_gtkconv_has_focus(GaimConversation *conv) |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5397 { |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5398 GaimConvWindow *win; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5399 GaimGtkWindow *gtkwin; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5400 gboolean has_focus; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5401 |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5402 win = gaim_conversation_get_window(conv); |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5403 gtkwin = GAIM_GTK_WINDOW(win); |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5404 |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5405 g_object_get(G_OBJECT(gtkwin->window), "has-toplevel-focus", &has_focus, NULL); |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5406 |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5407 return has_focus; |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5408 } |
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5409 |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5410 static void |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5411 gaim_gtkconv_updated(GaimConversation *conv, GaimConvUpdateType type) |
4359 | 5412 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5413 GaimConvWindow *win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5414 GaimGtkWindow *gtkwin; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5415 GaimGtkConversation *gtkconv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5416 GaimGtkChatPane *gtkchat; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5417 GaimConvChat *chat; |
4359 | 5418 |
10116 | 5419 g_return_if_fail(conv != NULL); |
5420 | |
4359 | 5421 win = gaim_conversation_get_window(conv); |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5422 gtkwin = GAIM_GTK_WINDOW(win); |
4359 | 5423 gtkconv = GAIM_GTK_CONVERSATION(conv); |
5424 | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5425 if (type == GAIM_CONV_UPDATE_ACCOUNT) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5426 { |
4359 | 5427 gaim_conversation_autoset_title(conv); |
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5428 |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5429 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5430 gaim_gtkconv_update_buddy_icon(conv); |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5431 |
4359 | 5432 gaim_gtkconv_update_buttons_by_protocol(conv); |
5433 | |
4685 | 5434 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); |
4359 | 5435 |
5436 smiley_themeize(gtkconv->imhtml); | |
6394 | 5437 |
6395 | 5438 update_tab_icon(conv); |
4359 | 5439 } |
5440 else if (type == GAIM_CONV_UPDATE_TYPING || | |
8155
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5441 type == GAIM_CONV_UPDATE_UNSEEN || |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5442 type == GAIM_CONV_UPDATE_TITLE) |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5443 { |
9472 | 5444 char *title; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5445 GaimConvIm *im = NULL; |
9472 | 5446 GaimConnection *gc = gaim_conversation_get_gc(conv); |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5447 char color[8]; |
4736 | 5448 |
4359 | 5449 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5450 im = GAIM_CONV_IM(conv); |
4359 | 5451 |
9472 | 5452 if (!gc || ((gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) |
5453 && gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)))) | |
5454 title = g_strdup_printf("(%s)", gaim_conversation_get_title(conv)); | |
5455 | |
5456 else | |
5457 title = g_strdup(gaim_conversation_get_title(conv)); | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5458 |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5459 *color = '\0'; |
4359 | 5460 |
5461 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label)) | |
5462 gtk_widget_realize(gtkconv->tab_label); | |
5463 | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5464 if (im != NULL && gaim_conv_im_get_typing_state(im) == GAIM_TYPING) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5465 { |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5466 strcpy(color, "#47A046"); |
4359 | 5467 } |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5468 else if (im != NULL && gaim_conv_im_get_typing_state(im) == GAIM_TYPED) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5469 { |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5470 strcpy(color, "#D1940C"); |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5471 } |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5472 else if (gaim_conversation_get_unseen(conv) == GAIM_UNSEEN_NICK) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5473 { |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5474 strcpy(color, "#314E6C"); |
4359 | 5475 } |
8252 | 5476 else if (gaim_conversation_get_unseen(conv) == GAIM_UNSEEN_TEXT) |
5477 { | |
5478 strcpy(color, "#DF421E"); | |
5479 } | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5480 else if (gaim_conversation_get_unseen(conv) == GAIM_UNSEEN_EVENT) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5481 { |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5482 strcpy(color, "#868272"); |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5483 } |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5484 |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5485 if (*color != '\0') |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5486 { |
8536 | 5487 char *html_title,*label; |
5488 | |
5489 html_title = gaim_escape_html(title); | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5490 |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5491 label = g_strdup_printf("<span color=\"%s\">%s</span>", |
8536 | 5492 color, html_title); |
5493 g_free(html_title); | |
7995
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5494 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label); |
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5495 g_free(label); |
4359 | 5496 } |
7995
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5497 else |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5498 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title); |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5499 |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5500 if (conv == gaim_conv_window_get_active_conversation(win)) |
4736 | 5501 update_typing_icon(conv); |
8155
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5502 |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5503 if (type == GAIM_CONV_UPDATE_TITLE) { |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5504 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5505 if (conv == gaim_conv_window_get_active_conversation(win)) |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5506 gtk_window_set_title(GTK_WINDOW(gtkwin->window), title); |
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5507 } |
9472 | 5508 |
5509 g_free(title); | |
4359 | 5510 } |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5511 else if (type == GAIM_CONV_UPDATE_TOPIC) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5512 { |
7154 | 5513 const char *topic; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5514 chat = GAIM_CONV_CHAT(conv); |
4359 | 5515 gtkchat = gtkconv->u.chat; |
5516 | |
7154 | 5517 topic = gaim_conv_chat_get_topic(chat); |
5518 | |
9554 | 5519 gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), topic ? topic : ""); |
7154 | 5520 gtk_tooltips_set_tip(gtkconv->tooltips, gtkchat->topic_text, |
9554 | 5521 topic ? topic : "", NULL); |
4359 | 5522 } |
5523 else if (type == GAIM_CONV_ACCOUNT_ONLINE || | |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5524 type == GAIM_CONV_ACCOUNT_OFFLINE) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5525 { |
7929 | 5526 gray_stuff_out(gaim_conv_window_get_active_conversation(win)); |
4360
c435a29370b8
[gaim-migrate @ 4626]
Christian Hammond <chipx86@chipx86.com>
parents:
4359
diff
changeset
|
5527 generate_send_as_items(win, NULL); |
8946 | 5528 update_tab_icon(conv); |
9472 | 5529 gaim_conversation_autoset_title(conv); |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
5530 } |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5531 else if (type == GAIM_CONV_UPDATE_AWAY) |
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5532 { |
8946 | 5533 update_tab_icon(conv); |
4359 | 5534 } |
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
5535 else if (type == GAIM_CONV_UPDATE_ADD || type == GAIM_CONV_UPDATE_REMOVE || |
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
5536 type == GAIM_CONV_UPDATE_CHATLEFT) |
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5537 { |
9472 | 5538 gaim_conversation_autoset_title(conv); |
7929 | 5539 gray_stuff_out(conv); |
4397
ce3a0eba91ef
[gaim-migrate @ 4666]
Christian Hammond <chipx86@chipx86.com>
parents:
4387
diff
changeset
|
5540 } |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5541 else if (type == GAIM_CONV_UPDATE_ICON) |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5542 { |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5543 gaim_gtkconv_update_buddy_icon(conv); |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5544 } |
4359 | 5545 } |
5546 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5547 static GaimConversationUiOps conversation_ui_ops = |
4359 | 5548 { |
5549 gaim_gtkconv_destroy, /* destroy_conversation */ | |
5550 gaim_gtkconv_write_chat, /* write_chat */ | |
5551 gaim_gtkconv_write_im, /* write_im */ | |
5552 gaim_gtkconv_write_conv, /* write_conv */ | |
5553 gaim_gtkconv_chat_add_user, /* chat_add_user */ | |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5554 gaim_gtkconv_chat_add_users, /* chat_add_users */ |
4359 | 5555 gaim_gtkconv_chat_rename_user, /* chat_rename_user */ |
5556 gaim_gtkconv_chat_remove_user, /* chat_remove_user */ | |
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5557 gaim_gtkconv_chat_remove_users, /* chat_remove_users */ |
9554 | 5558 gaim_gtkconv_chat_update_user, /* chat_update_user */ |
4359 | 5559 NULL, /* update_progress */ |
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5560 gaim_gtkconv_has_focus, /* has_focus */ |
4359 | 5561 gaim_gtkconv_updated /* updated */ |
5562 }; | |
5563 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5564 GaimConversationUiOps * |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
5565 gaim_gtk_conversations_get_conv_ui_ops(void) |
4359 | 5566 { |
4465
6e37eb000b7a
[gaim-migrate @ 4740]
Christian Hammond <chipx86@chipx86.com>
parents:
4454
diff
changeset
|
5567 return &conversation_ui_ops; |
4359 | 5568 } |
5569 | |
5570 /************************************************************************** | |
5571 * Public conversation utility functions | |
5572 **************************************************************************/ | |
5573 void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5574 gaim_gtkconv_update_buddy_icon(GaimConversation *conv) |
4359 | 5575 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5576 GaimGtkConversation *gtkconv; |
7143 | 5577 GaimGtkWindow *gtkwin = GAIM_GTK_WINDOW(gaim_conversation_get_window(conv)); |
4359 | 5578 |
5579 char filename[256]; | |
5580 FILE *file; | |
5581 GError *err = NULL; | |
5582 | |
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5583 const void *data; |
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5584 size_t len; |
4359 | 5585 |
5586 GdkPixbuf *buf; | |
5587 | |
5588 GtkWidget *event; | |
5589 GtkWidget *frame; | |
5590 GdkPixbuf *scale; | |
5591 GdkPixmap *pm; | |
5592 GdkBitmap *bm; | |
9318 | 5593 int scale_width, scale_height; |
9332 | 5594 GtkRequisition requisition; |
9318 | 5595 |
5596 GaimAccount *account; | |
5597 GaimPluginProtocolInfo *prpl_info = NULL; | |
4359 | 5598 |
8821 | 5599 GaimButtonStyle button_type; |
5600 | |
9324 | 5601 GaimBuddyIcon *icon; |
5602 | |
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5603 g_return_if_fail(conv != NULL); |
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5604 g_return_if_fail(GAIM_IS_GTK_CONVERSATION(conv)); |
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5605 g_return_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_IM); |
4359 | 5606 |
5607 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
10175 | 5608 |
9687 | 5609 if (!gtkconv->u.im->show_icon) |
5610 return; | |
5611 | |
9318 | 5612 account = gaim_conversation_get_account(conv); |
5613 if(account && account->gc) | |
5614 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
4359 | 5615 |
9845 | 5616 /* Remove the current icon stuff */ |
9885 | 5617 if (gtkconv->u.im->icon_container != NULL) |
5618 gtk_widget_destroy(gtkconv->u.im->icon_container); | |
5619 gtkconv->u.im->icon_container = NULL; | |
9845 | 5620 |
5621 if (gtkconv->u.im->anim != NULL) | |
5622 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); | |
5623 | |
9887 | 5624 gtkconv->u.im->anim = NULL; |
5625 | |
9845 | 5626 if (gtkconv->u.im->icon_timer != 0) |
5627 g_source_remove(gtkconv->u.im->icon_timer); | |
5628 | |
5629 gtkconv->u.im->icon_timer = 0; | |
5630 | |
5631 if (gtkconv->u.im->iter != NULL) | |
5632 g_object_unref(G_OBJECT(gtkconv->u.im->iter)); | |
4359 | 5633 |
10116 | 5634 gtkconv->u.im->iter = NULL; |
5635 | |
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
5636 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) |
4359 | 5637 return; |
5638 | |
5639 if (gaim_conversation_get_gc(conv) == NULL) | |
5640 return; | |
5641 | |
9324 | 5642 icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); |
5643 | |
5644 if (icon == NULL) | |
5645 return; | |
5646 | |
5647 data = gaim_buddy_icon_get_data(icon, &len); | |
5648 | |
5649 /* this is such an evil hack, i don't know why i'm even considering it. | |
5650 * we'll do it differently when gdk-pixbuf-loader isn't leaky anymore. */ | |
5651 /* gdk-pixbuf-loader was leaky? is it still? */ | |
5652 g_snprintf(filename, sizeof(filename), | |
5653 "%s" G_DIR_SEPARATOR_S "gaimicon-%s.%d", | |
5654 g_get_tmp_dir(), gaim_conversation_get_name(conv), getpid()); | |
5655 | |
5656 if (!(file = fopen(filename, "wb"))) | |
5657 return; | |
5658 | |
5659 fwrite(data, 1, len, file); | |
5660 fclose(file); | |
5661 | |
5662 gtkconv->u.im->anim = gdk_pixbuf_animation_new_from_file(filename, &err); | |
5663 /* make sure we remove the file as soon as possible */ | |
5664 unlink(filename); | |
5665 | |
4359 | 5666 if (err) { |
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
5667 gaim_debug(GAIM_DEBUG_ERROR, "gtkconv", |
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
5668 "Buddy icon error: %s\n", err->message); |
4359 | 5669 g_error_free(err); |
5670 } | |
5671 | |
5672 if (!gtkconv->u.im->anim) | |
5673 return; | |
5674 | |
5675 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) { | |
5676 gtkconv->u.im->iter = NULL; | |
5677 buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | |
5678 } else { | |
5679 gtkconv->u.im->iter = | |
8496 | 5680 gdk_pixbuf_animation_get_iter(gtkconv->u.im->anim, NULL); /* LEAK */ |
4359 | 5681 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); |
8189 | 5682 if (gtkconv->u.im->animate) |
5683 start_anim(NULL, conv); | |
4359 | 5684 } |
5685 | |
9318 | 5686 get_icon_scale_size(gtkconv->u.im->anim, prpl_info ? &prpl_info->icon_spec : |
5687 NULL, &scale_width, &scale_height); | |
4359 | 5688 scale = gdk_pixbuf_scale_simple(buf, |
9318 | 5689 MAX(gdk_pixbuf_get_width(buf) * scale_width / |
4359 | 5690 gdk_pixbuf_animation_get_width(gtkconv->u.im->anim), 1), |
9318 | 5691 MAX(gdk_pixbuf_get_height(buf) * scale_height / |
4359 | 5692 gdk_pixbuf_animation_get_height(gtkconv->u.im->anim), 1), |
5693 GDK_INTERP_NEAREST); | |
5694 | |
5695 gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); | |
4793 | 5696 g_object_unref(G_OBJECT(scale)); |
4359 | 5697 |
8821 | 5698 |
9885 | 5699 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); |
8821 | 5700 |
4359 | 5701 frame = gtk_frame_new(NULL); |
5702 gtk_frame_set_shadow_type(GTK_FRAME(frame), | |
5703 (bm ? GTK_SHADOW_NONE : GTK_SHADOW_IN)); | |
9885 | 5704 gtk_box_pack_start(GTK_BOX(gtkconv->u.im->icon_container), frame, |
5705 FALSE, FALSE, 0); | |
8821 | 5706 |
4359 | 5707 event = gtk_event_box_new(); |
5708 gtk_container_add(GTK_CONTAINER(frame), event); | |
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
5709 g_signal_connect(G_OBJECT(event), "button-press-event", |
4359 | 5710 G_CALLBACK(icon_menu), conv); |
5711 gtk_widget_show(event); | |
5712 | |
4635 | 5713 gtkconv->u.im->icon = gtk_image_new_from_pixmap(pm, bm); |
9318 | 5714 gtk_widget_set_size_request(gtkconv->u.im->icon, scale_width, scale_height); |
4359 | 5715 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); |
5716 gtk_widget_show(gtkconv->u.im->icon); | |
5717 | |
4793 | 5718 g_object_unref(G_OBJECT(pm)); |
4359 | 5719 |
5720 if (bm) | |
4793 | 5721 g_object_unref(G_OBJECT(bm)); |
7143 | 5722 |
9332 | 5723 button_type = gaim_prefs_get_int("/gaim/gtk/conversations/button_type"); |
9876 | 5724 /* the button seems to get its size before the box, so... */ |
5725 gtk_widget_size_request(gtkconv->send, &requisition); | |
9683 | 5726 if (button_type == GAIM_BUTTON_NONE || requisition.height * 1.5 < scale_height) { |
9885 | 5727 gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), |
5728 gtkconv->u.im->icon_container, FALSE, FALSE, 0); | |
9332 | 5729 /* gtk_box_reorder_child(GTK_BOX(gtkconv->lower_hbox), vbox, 0); */ |
5730 } else { | |
9885 | 5731 gtk_box_pack_start(GTK_BOX(gtkconv->bbox), |
5732 gtkconv->u.im->icon_container, FALSE, FALSE, 0); | |
5733 gtk_box_reorder_child(GTK_BOX(gtkconv->bbox), | |
5734 gtkconv->u.im->icon_container, 0); | |
9332 | 5735 } |
5736 | |
9885 | 5737 gtk_widget_show(gtkconv->u.im->icon_container); |
9332 | 5738 gtk_widget_show(frame); |
5739 | |
7143 | 5740 /* The buddy icon code needs badly to be fixed. */ |
5741 buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | |
8068 | 5742 if(conv == gaim_conv_window_get_active_conversation(gaim_conversation_get_window(conv))) |
5743 gtk_window_set_icon(GTK_WINDOW(gtkwin->window), buf); | |
4359 | 5744 } |
5745 | |
5746 void | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5747 gaim_gtkconv_update_buttons_by_protocol(GaimConversation *conv) |
4359 | 5748 { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5749 GaimConvWindow *win; |
4359 | 5750 |
4398
a8249a5250b6
[gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents:
4397
diff
changeset
|
5751 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
4359 | 5752 return; |
5753 | |
7887 | 5754 win = gaim_conversation_get_window(conv); |
5755 | |
5756 if (win != NULL && gaim_conv_window_get_active_conversation(win) == conv) | |
5757 gray_stuff_out(conv); | |
4359 | 5758 } |
5759 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5760 GaimConvWindow * |
4359 | 5761 gaim_gtkwin_get_at_xy(int x, int y) |
5762 { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5763 GaimConvWindow *win = NULL; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5764 GaimGtkWindow *gtkwin; |
4359 | 5765 GdkWindow *gdkwin; |
5766 GList *l; | |
5767 | |
5768 gdkwin = gdk_window_at_pointer(&x, &y); | |
5769 | |
5770 if (gdkwin) | |
5771 gdkwin = gdk_window_get_toplevel(gdkwin); | |
5772 | |
5773 for (l = gaim_get_windows(); l != NULL; l = l->next) { | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5774 win = (GaimConvWindow *)l->data; |
4359 | 5775 |
4398
a8249a5250b6
[gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents:
4397
diff
changeset
|
5776 if (!GAIM_IS_GTK_WINDOW(win)) |
4359 | 5777 continue; |
5778 | |
5779 gtkwin = GAIM_GTK_WINDOW(win); | |
5780 | |
5781 if (gdkwin == gtkwin->window->window) | |
5782 return win; | |
5783 } | |
5784 | |
5785 return NULL; | |
5786 } | |
5787 | |
5788 int | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5789 gaim_gtkconv_get_tab_at_xy(GaimConvWindow *win, int x, int y) |
4359 | 5790 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5791 GaimGtkWindow *gtkwin; |
4359 | 5792 GList *l; |
5793 gint nb_x, nb_y, x_rel, y_rel; | |
5794 GtkNotebook *notebook; | |
5795 GtkWidget *tab; | |
5796 gint i, page_num = 0; | |
5797 gboolean first_visible = TRUE; | |
5798 | |
4398
a8249a5250b6
[gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents:
4397
diff
changeset
|
5799 if (!GAIM_IS_GTK_WINDOW(win)) |
4359 | 5800 return -1; |
5801 | |
5802 gtkwin = GAIM_GTK_WINDOW(win); | |
5803 notebook = GTK_NOTEBOOK(gtkwin->notebook); | |
5804 | |
5805 gdk_window_get_origin(gtkwin->notebook->window, &nb_x, &nb_y); | |
5806 x_rel = x - nb_x; | |
5807 y_rel = y - nb_y; | |
5808 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5809 for (l = gaim_conv_window_get_conversations(win), i = 0; |
4359 | 5810 l != NULL; |
5811 l = l->next, i++) { | |
5812 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5813 GaimConversation *conv = l->data; |
4359 | 5814 tab = GAIM_GTK_CONVERSATION(conv)->tab_label; |
5815 | |
5816 if (!GTK_WIDGET_MAPPED(tab)) | |
5817 continue; | |
5818 | |
5819 if (first_visible) { | |
5820 first_visible = FALSE; | |
5821 | |
5822 if (x_rel < tab->allocation.x) x_rel = tab->allocation.x; | |
5823 if (y_rel < tab->allocation.y) y_rel = tab->allocation.y; | |
5824 } | |
5825 | |
5826 if (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP || | |
5827 gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM) { | |
5828 | |
5829 if (tab->allocation.x <= x_rel) { | |
5830 if (tab->allocation.x + tab->allocation.width <= x_rel) | |
5831 page_num = i + 1; | |
5832 else | |
5833 page_num = i; | |
5834 } | |
5835 else | |
5836 break; | |
5837 } | |
5838 else { | |
5839 if (tab->allocation.y <= y_rel) { | |
5840 if (tab->allocation.y + tab->allocation.height <= y_rel) | |
5841 page_num = i + 1; | |
5842 else | |
5843 page_num = i; | |
5844 } | |
5845 else | |
5846 break; | |
5847 } | |
5848 } | |
5849 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5850 if (i == gaim_conv_window_get_conversation_count(win) + 1) |
4359 | 5851 return -1; |
5852 | |
5853 return page_num; | |
5854 } | |
5855 | |
5856 int | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5857 gaim_gtkconv_get_dest_tab_at_xy(GaimConvWindow *win, int x, int y) |
4359 | 5858 { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5859 GaimGtkWindow *gtkwin; |
4359 | 5860 GList *l; |
5861 gint nb_x, nb_y, x_rel, y_rel; | |
5862 GtkNotebook *notebook; | |
5863 GtkWidget *tab; | |
5864 gint i, page_num = 0; | |
5865 | |
4398
a8249a5250b6
[gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents:
4397
diff
changeset
|
5866 if (!GAIM_IS_GTK_WINDOW(win)) |
4359 | 5867 return -1; |
5868 | |
5869 gtkwin = GAIM_GTK_WINDOW(win); | |
5870 notebook = GTK_NOTEBOOK(gtkwin->notebook); | |
5871 | |
5872 gdk_window_get_origin(gtkwin->notebook->window, &nb_x, &nb_y); | |
5873 x_rel = x - nb_x; | |
5874 y_rel = y - nb_y; | |
5875 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5876 for (l = gaim_conv_window_get_conversations(win), i = 0; |
4359 | 5877 l != NULL; |
5878 l = l->next, i++) { | |
5879 | |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5880 GaimConversation *conv = l->data; |
4359 | 5881 tab = GAIM_GTK_CONVERSATION(conv)->tab_label; |
5882 | |
5883 if (!GTK_WIDGET_MAPPED(tab)) | |
5884 continue; | |
5885 | |
5886 if (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP || | |
5887 gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM) { | |
5888 | |
5889 if (tab->allocation.x <= x_rel) { | |
5890 if (tab->allocation.x + (tab->allocation.width / 2) <= x_rel) | |
5891 page_num = i + 1; | |
5892 else | |
5893 page_num = i; | |
5894 } | |
5895 else | |
5896 break; | |
5897 } | |
5898 else { | |
5899 if (tab->allocation.y <= y_rel) { | |
5900 if (tab->allocation.y + (tab->allocation.height / 2) <= y_rel) | |
5901 page_num = i + 1; | |
5902 else | |
5903 page_num = i; | |
5904 } | |
5905 else | |
5906 break; | |
5907 } | |
5908 } | |
5909 | |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5910 if (i == gaim_conv_window_get_conversation_count(win) + 1) |
4359 | 5911 return -1; |
5912 | |
5913 return page_num; | |
5914 } | |
4940
3708545afe42
[gaim-migrate @ 5274]
Christian Hammond <chipx86@chipx86.com>
parents:
4939
diff
changeset
|
5915 |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5916 static void |
6398
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5917 escape_closes_pref_cb(const char *name, GaimPrefType type, gpointer value, |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5918 gpointer data) |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5919 { |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5920 if (value) |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5921 gtk_accel_map_change_entry(N_("<main>/Conversation/Close"), |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5922 GDK_Escape, 0, TRUE); |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5923 else |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5924 gtk_accel_map_change_entry(N_("<main>/Conversation/Close"), |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5925 GDK_W, GDK_CONTROL_MASK, TRUE); |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5926 } |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5927 |
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
5928 static void |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5929 close_on_tabs_pref_cb(const char *name, GaimPrefType type, gpointer value, |
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
5930 gpointer data) |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5931 { |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5932 GList *l; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5933 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5934 GaimGtkConversation *gtkconv; |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5935 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5936 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5937 conv = (GaimConversation *)l->data; |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5938 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5939 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5940 continue; |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5941 |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5942 gtkconv = GAIM_GTK_CONVERSATION(conv); |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5943 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5944 if (value) |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5945 gtk_widget_show(gtkconv->close); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5946 else |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5947 gtk_widget_hide(gtkconv->close); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5948 } |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5949 } |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5950 |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5951 static void |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5952 show_timestamps_pref_cb(const char *name, GaimPrefType type, gpointer value, |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5953 gpointer data) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5954 { |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5955 GList *l; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5956 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5957 GaimGtkConversation *gtkconv; |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5958 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5959 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5960 conv = (GaimConversation *)l->data; |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5961 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5962 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5963 continue; |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5964 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5965 gtkconv = GAIM_GTK_CONVERSATION(conv); |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5966 |
7386 | 5967 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), (gboolean)GPOINTER_TO_INT(value)); |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5968 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5969 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5970 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5971 static void |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5972 spellcheck_pref_cb(const char *name, GaimPrefType type, gpointer value, |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5973 gpointer data) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5974 { |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5975 #ifdef USE_GTKSPELL |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5976 GList *cl; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5977 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5978 GaimGtkConversation *gtkconv; |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5979 GtkSpell *spell; |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5980 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5981 for (cl = gaim_get_conversations(); cl != NULL; cl = cl->next) { |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
5982 |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5983 conv = (GaimConversation *)cl->data; |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5984 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5985 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5986 continue; |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5987 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5988 gtkconv = GAIM_GTK_CONVERSATION(conv); |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5989 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5990 if (value) |
7538
357eb1c39b72
[gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents:
7476
diff
changeset
|
5991 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry)); |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5992 else { |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5993 spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(gtkconv->entry)); |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5994 gtkspell_detach(spell); |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5995 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5996 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5997 #endif |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5998 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5999 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6000 static void |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6001 tab_side_pref_cb(const char *name, GaimPrefType type, gpointer value, |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6002 gpointer data) |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6003 { |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6004 GList *l; |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6005 GtkPositionType pos; |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
6006 GaimConvWindow *win; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
6007 GaimGtkWindow *gtkwin; |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6008 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6009 pos = GPOINTER_TO_INT(value); |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6010 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6011 for (l = gaim_get_windows(); l != NULL; l = l->next) { |
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
6012 win = (GaimConvWindow *)l->data; |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6013 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6014 if (!GAIM_IS_GTK_WINDOW(win)) |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6015 continue; |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6016 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6017 gtkwin = GAIM_GTK_WINDOW(win); |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6018 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6019 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkwin->notebook), pos); |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6020 } |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6021 } |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6022 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6023 static void |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6024 show_formatting_toolbar_pref_cb(const char *name, GaimPrefType type, |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6025 gpointer value, gpointer data) |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6026 { |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6027 GList *l; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6028 GaimConversation *conv; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6029 GaimGtkConversation *gtkconv; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6030 GaimConvWindow *win; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6031 GaimGtkWindow *gtkwin; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6032 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6033 for (l = gaim_get_conversations(); l != NULL; l = l->next) |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6034 { |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6035 conv = (GaimConversation *)l->data; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6036 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6037 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6038 continue; |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6039 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6040 gtkconv = GAIM_GTK_CONVERSATION(conv); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6041 win = gaim_conversation_get_window(conv); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6042 gtkwin = GAIM_GTK_WINDOW(win); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6043 |
7386 | 6044 gtkconv->show_formatting_toolbar = (gboolean)GPOINTER_TO_INT(value); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6045 gtk_check_menu_item_set_active( |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6046 GTK_CHECK_MENU_ITEM(gtkwin->menu.show_formatting_toolbar), |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6047 gtkconv->show_formatting_toolbar); |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6048 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6049 if (gtkconv->show_formatting_toolbar) |
8317 | 6050 gtk_widget_show(gtkconv->toolbar); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6051 else |
8317 | 6052 gtk_widget_hide(gtkconv->toolbar); |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6053 } |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6054 } |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6055 |
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6056 static void |
9150 | 6057 button_type_pref_cb(const char *name, GaimPrefType type, |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6058 gpointer value, gpointer data) |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6059 { |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6060 GList *l; |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
6061 GaimConversation *conv; |
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
6062 GaimGtkConversation *gtkconv; |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6063 |
9150 | 6064 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
6065 conv = (GaimConversation *)l->data; |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6066 gtkconv = GAIM_GTK_CONVERSATION(conv); |
9150 | 6067 switch (conv->type) { |
6068 case GAIM_CONV_IM: | |
9749 | 6069 setup_im_buttons(conv, gtkconv->bbox); |
9150 | 6070 gaim_gtkconv_update_buddy_icon(conv); |
6071 break; | |
6072 case GAIM_CONV_CHAT: | |
9749 | 6073 setup_chat_buttons(conv, gtkconv->bbox); |
9150 | 6074 break; |
6075 default: | |
6076 break; | |
6077 } | |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6078 } |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6079 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6080 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6081 static void |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6082 animate_buddy_icons_pref_cb(const char *name, GaimPrefType type, |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6083 gpointer value, gpointer data) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6084 { |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6085 GList *l; |
8189 | 6086 GaimConversation *conv; |
6087 GaimGtkConversation *gtkconv; | |
6088 GaimConvWindow *win; | |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6089 |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6090 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6091 return; |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6092 |
8189 | 6093 /* Set the "animate" flag for each icon based on the new preference */ |
6094 for (l = gaim_get_ims(); l != NULL; l = l->next) { | |
6095 conv = (GaimConversation *)l->data; | |
6096 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
10112 | 6097 gtkconv->u.im->animate = GPOINTER_TO_INT(value); |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6098 } |
8189 | 6099 |
6100 /* Now either stop or start animation for the active conversation in each window */ | |
6101 for (l = gaim_get_windows(); l != NULL; l = l->next) { | |
6102 win = (GaimConvWindow *)l->data; | |
6103 conv = gaim_conv_window_get_active_conversation(win); | |
6104 gaim_gtkconv_update_buddy_icon(conv); | |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6105 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6106 } |
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6107 |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6108 static void |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6109 show_buddy_icons_pref_cb(const char *name, GaimPrefType type, gpointer value, |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6110 gpointer data) |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6111 { |
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6112 GList *l; |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6113 |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6114 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6115 GaimConversation *conv = l->data; |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6116 |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6117 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6118 gaim_conversation_foreach(gaim_gtkconv_update_buddy_icon); |
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
6119 } |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6120 } |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6121 |
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5680
diff
changeset
|
6122 static void |
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6123 conv_placement_pref_cb(const char *name, GaimPrefType type, |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6124 gpointer value, gpointer data) |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6125 { |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6126 GaimConvPlacementFunc func; |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6127 |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6128 if (strcmp(name, "/gaim/gtk/conversations/placement")) |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6129 return; |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6130 |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6131 func = gaim_conv_placement_get_fnc(value); |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6132 |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6133 if (func == NULL) |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6134 return; |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6135 |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6136 gaim_conv_placement_set_current_func(func); |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6137 } |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6138 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6139 void * |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6140 gaim_gtk_conversations_get_handle(void) |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6141 { |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6142 static int handle; |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6143 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6144 return &handle; |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6145 } |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6146 |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6147 void |
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
6148 gaim_gtk_conversations_init(void) |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6149 { |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6150 void *handle = gaim_gtk_conversations_get_handle(); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6151 |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6152 /* Conversations */ |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6153 gaim_prefs_add_none("/gaim/gtk/conversations"); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6154 gaim_prefs_add_bool("/gaim/gtk/conversations/close_on_tabs", TRUE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6155 gaim_prefs_add_bool("/gaim/gtk/conversations/escape_closes", FALSE); |
9025 | 6156 gaim_prefs_add_bool("/gaim/gtk/conversations/send_formatting", FALSE); |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6157 gaim_prefs_add_bool("/gaim/gtk/conversations/send_bold", FALSE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6158 gaim_prefs_add_bool("/gaim/gtk/conversations/send_italic", FALSE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6159 gaim_prefs_add_bool("/gaim/gtk/conversations/send_underline", FALSE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6160 gaim_prefs_add_bool("/gaim/gtk/conversations/show_timestamps", TRUE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6161 gaim_prefs_add_bool("/gaim/gtk/conversations/spellcheck", TRUE); |
9049 | 6162 #if 1 |
6163 gaim_prefs_add_bool("/gaim/gtk/conversations/ignore_colors", FALSE); | |
6164 gaim_prefs_add_bool("/gaim/gtk/conversations/ignore_fonts", FALSE); | |
6165 gaim_prefs_add_bool("/gaim/gtk/conversations/ignore_font_sizes", FALSE); | |
6166 #else | |
8944 | 6167 gaim_prefs_add_bool("/gaim/gtk/conversations/ignore_formatting", FALSE); |
9049 | 6168 #endif |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6169 gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); |
9832 | 6170 gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); |
9130 | 6171 |
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6172 gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); |
8998 | 6173 gaim_prefs_add_int("/gaim/gtk/conversations/placement_number", 1); |
9025 | 6174 gaim_prefs_add_string("/gaim/gtk/conversations/bgcolor", ""); |
6175 gaim_prefs_add_string("/gaim/gtk/conversations/fgcolor", ""); | |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6176 gaim_prefs_add_string("/gaim/gtk/conversations/font_face", ""); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6177 gaim_prefs_add_int("/gaim/gtk/conversations/font_size", 3); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6178 gaim_prefs_add_bool("/gaim/gtk/conversations/tabs", TRUE); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6179 gaim_prefs_add_int("/gaim/gtk/conversations/tab_side", GTK_POS_TOP); |
9150 | 6180 gaim_prefs_add_int("/gaim/gtk/conversations/button_type", |
6181 GAIM_BUTTON_TEXT_IMAGE); | |
6182 | |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6183 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6184 /* Conversations -> Chat */ |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6185 gaim_prefs_add_none("/gaim/gtk/conversations/chat"); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6186 gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_width", 410); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6187 gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_height", 160); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6188 gaim_prefs_add_int("/gaim/gtk/conversations/chat/entry_height", 50); |
9319 | 6189 gaim_prefs_add_bool("/gaim/gtk/conversations/chat/raise_on_events", FALSE); |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6190 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6191 /* Conversations -> IM */ |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6192 gaim_prefs_add_none("/gaim/gtk/conversations/im"); |
9150 | 6193 |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6194 gaim_prefs_add_bool("/gaim/gtk/conversations/im/animate_buddy_icons", TRUE); |
9150 | 6195 |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6196 gaim_prefs_add_int("/gaim/gtk/conversations/im/default_width", 410); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6197 gaim_prefs_add_int("/gaim/gtk/conversations/im/default_height", 160); |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6198 gaim_prefs_add_int("/gaim/gtk/conversations/im/entry_height", 50); |
9319 | 6199 gaim_prefs_add_bool("/gaim/gtk/conversations/im/raise_on_events", FALSE); |
6200 gaim_prefs_add_bool("/gaim/gtk/conversations/im/show_buddy_icons", TRUE); | |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6201 |
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6202 /* Connect callbacks. */ |
10087 | 6203 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/escape_closes", |
6398
c9894c0fbc6f
[gaim-migrate @ 6903]
Christian Hammond <chipx86@chipx86.com>
parents:
6395
diff
changeset
|
6204 escape_closes_pref_cb, NULL); |
10087 | 6205 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/close_on_tabs", |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6206 close_on_tabs_pref_cb, NULL); |
10087 | 6207 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/show_timestamps", |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6208 show_timestamps_pref_cb, NULL); |
10087 | 6209 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/show_formatting_toolbar", |
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6210 show_formatting_toolbar_pref_cb, NULL); |
10087 | 6211 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/spellcheck", |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6212 spellcheck_pref_cb, NULL); |
10087 | 6213 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/tab_side", |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6214 tab_side_pref_cb, NULL); |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6215 |
10087 | 6216 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/placement", |
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6217 conv_placement_pref_cb, NULL); |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6218 gaim_prefs_trigger_callback("/gaim/gtk/conversations/placement"); |
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6219 |
10087 | 6220 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/button_type", |
9150 | 6221 button_type_pref_cb, NULL); |
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
6222 |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6223 /* IM callbacks */ |
10087 | 6224 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/im/animate_buddy_icons", |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6225 animate_buddy_icons_pref_cb, NULL); |
10087 | 6226 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/im/show_buddy_icons", |
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6227 show_buddy_icons_pref_cb, NULL); |
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6228 |
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6229 |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6230 /********************************************************************** |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6231 * Register signals |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6232 **********************************************************************/ |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6233 gaim_signal_register(handle, "conversation-drag-ended", |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6234 gaim_marshal_VOID__POINTER_POINTER, NULL, 2, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6235 gaim_value_new(GAIM_TYPE_SUBTYPE, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6236 GAIM_SUBTYPE_CONV_WINDOW), |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6237 gaim_value_new(GAIM_TYPE_SUBTYPE, |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6238 GAIM_SUBTYPE_CONV_WINDOW)); |
9167 | 6239 |
6240 /********************************************************************** | |
6241 * Register commands | |
6242 **********************************************************************/ | |
9829 | 6243 gaim_cmd_register("say", "S", GAIM_CMD_P_DEFAULT, |
6244 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
6245 say_command_cb, _("say <message>: Send a message normally as if you weren't using a command."), NULL); | |
9213 | 6246 gaim_cmd_register("me", "S", GAIM_CMD_P_DEFAULT, |
6247 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
9597 | 6248 me_command_cb, _("me <action>: Send an IRC style action to a buddy or chat."), NULL); |
9213 | 6249 gaim_cmd_register("debug", "w", GAIM_CMD_P_DEFAULT, |
6250 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
9597 | 6251 debug_command_cb, _("debug <option>: Send various debug information to the current conversation."), NULL); |
9213 | 6252 |
6253 gaim_cmd_register("help", "w", GAIM_CMD_P_DEFAULT, | |
9597 | 6254 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM | GAIM_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, |
6255 help_command_cb, _("help <command>: Help on a specific command."), NULL); | |
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6256 } |
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6257 |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6258 void |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6259 gaim_gtk_conversations_uninit(void) |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6260 { |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6261 gaim_signals_unregister_by_instance(gaim_gtk_conversations_get_handle()); |
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6262 } |