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