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