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