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