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