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