Mercurial > pidgin
annotate src/gtkconv.c @ 12645:fc28451f5d96
[gaim-migrate @ 14983]
SF Patch #1314512 from Sadrul (who has a patch for everything)
"This patch introduces a flag for protocol plugins that
support offline messages (like Y!M and ICQ). This was
encouraged by the following conversation:
<sadrul> should offline buddies be listed/enabled in
the send-to menu?
<rekkanoryo> i would think only for protocols that
support offline messaging, if it's indicated that the
buddy is offline
-- <snip> --
<Bleeter> sadrul: personally, I'd like to see a
'supports offline' flag of some description
<Bleeter> one could then redirect (via plugins) through
email or alternative methods
<Bleeter> just a thought
<Paco-Paco> yeah, that sounds like a reasonble thing to have
This patch uses this flag to disable the buddies in the
send-to menu who are offline and the protocol doesn't
support offline messages."
I made this make the label insensitive instead of the whole menuitem. This
should address SimGuy's concerns about inconsistency (i.e. you could create a
conversation with someone via the buddy list that you couldn't create via the
Send To menu). I also hacked up some voodoo to show the label as sensitive when
moused-over, as that looks better (given the label-insensitive thing is itself a
hack). I think this works quite well.
BUG NOTE:
This makes more obvious an existing bug. The Send To menu isn't updated when
buddies sign on or off or change status (at least under some circumstances).
We need to fix that anyway, so I'm not going to let it hold up this commit.
Switching tabs will clear it up. I'm thinking we just might want to build the
contents of that menu when it is selected. That would save us a mess of
inefficient signal callbacks that update the Send To menus in open windows all
the time.
AIM NOTE:
This assumes that AIM can't offline message. That's not strictly true. You can
message invisible users on AIM. However, by design, we can't tell when a user
is invisible without resorting to dirty hackery. In practice, this isn't a
problem, as you can still select the AIM user from the menu. And really, how
often will you be choosing the Invisible contact, rather than the user going
Invisible in the middle of a conversation or IMing you while they're Invisible?
JABBER NOTE:
This assumes that Jabber can always offline message. This isn't strictly true.
Sadrul said:
I have updated Jabber according to this link which seems to
talk about how to determine the existence offline-message
support in a server:
http://www.jabber.org/jeps/jep-0013.html#discover
However, jabber.org doesn't seem to send the required
info. So I am not sure about it.
He later said:
I talked to Nathan and he said offline message support is
mostly assumed for most jabber servers. GTalk doesn't yet
support it, but they are working on it. So I have made
jabber to always return TRUE.
If there is truly no way to detect offline messaging capability, then this is
an acceptable solution. We could special case Google Talk because of its
popularity, and remove that later. It's probably not worth it though.
MSN NOTE:
This assumes that MSN can never offline message. That's effectively true, but
to be technically correct, MSN can offline message if there's already a
switchboard conversation open with a user. We could write an offline_message
function in the MSN prpl to detect that, but it'd be of limited usefulness,
especially given that under most circumstances (where this might matter), the
switchboard connection will be closed almost immediately.
CVS NOTE:
I'm writing to share a tragic little story.
I have a PC that I use for Gaim development. One day, I was writing a commit
message on it, when all of a suddent it went berserk. The screen started
flashing, and the whole commit message just disappeared. All of it. And it was
a good commit message! I had to cram and rewrite it really quickly. Needless to
say, my rushed commit message wasn't nearly as good, and I blame the PC for that.
Seriously, though, what kind of version control system loses your commit
message on a broken connection to the server? Stupid!
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Fri, 23 Dec 2005 19:26:04 +0000 |
| parents | 366326fa9cb4 |
| children | a614eb6c7d9d |
| 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" |
| 12272 | 45 #include "idle.h" |
| 6982 | 46 #include "imgstore.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
47 #include "log.h" |
|
5436
ad445074d239
[gaim-migrate @ 5818]
Christian Hammond <chipx86@chipx86.com>
parents:
5402
diff
changeset
|
48 #include "notify.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
49 #include "prpl.h" |
| 6038 | 50 #include "request.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
51 #include "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" |
| 11583 | 56 #include "gtkconvwin.h" |
| 9709 | 57 #include "gtkdialogs.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
58 #include "gtkimhtml.h" |
| 8317 | 59 #include "gtkimhtmltoolbar.h" |
| 7431 | 60 #include "gtklog.h" |
|
11554
f8443218b7fe
[gaim-migrate @ 13814]
Gary Kramlich <grim@reaperworld.com>
parents:
11552
diff
changeset
|
61 #include "gtkmenutray.h" |
|
5907
18486c860a46
[gaim-migrate @ 6339]
Christian Hammond <chipx86@chipx86.com>
parents:
5902
diff
changeset
|
62 #include "gtkpounce.h" |
|
11206
86d3ce670f05
[gaim-migrate @ 13334]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11145
diff
changeset
|
63 #include "gtkprefs.h" |
|
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
64 #include "gtkprivacy.h" |
| 11525 | 65 #include "gtkthemes.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
66 #include "gtkutils.h" |
|
10297
ec140184437b
[gaim-migrate @ 11480]
Luke Schierer <lschiere@pidgin.im>
parents:
10274
diff
changeset
|
67 #include "gtkstock.h" |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
68 |
|
12360
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
69 #include "gtknickcolors.h" |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
70 |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
71 #define AUTO_RESPONSE "<AUTO-REPLY> : " |
|
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
72 |
|
12359
cbf9f2e26916
[gaim-migrate @ 14663]
Richard Laager <rlaager@wiktel.com>
parents:
12358
diff
changeset
|
73 #define SEND_COLOR "#204a87" |
|
cbf9f2e26916
[gaim-migrate @ 14663]
Richard Laager <rlaager@wiktel.com>
parents:
12358
diff
changeset
|
74 #define RECV_COLOR "#cc0000" |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
75 #define HIGHLIGHT_COLOR "#AF7F00" |
| 7854 | 76 |
| 12335 | 77 /* Undef this to turn off "custom-smiley" debug messages */ |
| 78 #define DEBUG_CUSTOM_SMILEY | |
| 79 | |
| 10108 | 80 #define LUMINANCE(c) (float)((0.3*(c.red))+(0.59*(c.green))+(0.11*(c.blue))) |
| 81 | |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
82 #if 0 |
| 10108 | 83 /* These colors come from the default GNOME palette */ |
| 84 static GdkColor nick_colors[] = { | |
|
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
85 {0, 47616, 46336, 43776}, /* Basic 3D Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
86 {0, 32768, 32000, 29696}, /* Basic 3D Dark */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
87 {0, 22016, 20992, 18432}, /* 3D Shadow */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
88 {0, 33536, 42496, 32512}, /* Green Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
89 {0, 23808, 29952, 21760}, /* Green Dark */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
90 {0, 17408, 22016, 12800}, /* Green Shadow */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
91 {0, 57344, 46592, 44800}, /* Red Hilight */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
92 {0, 49408, 26112, 23040}, /* Red Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
93 {0, 34816, 17920, 12544}, /* Red Dark */ |
|
10812
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10810
diff
changeset
|
94 {0, 49408, 14336, 8704}, /* Red Shadow */ |
|
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
95 {0, 34816, 32512, 41728}, /* Purple Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
96 {0, 25088, 23296, 33024}, /* Purple Dark */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
97 {0, 18688, 16384, 26112}, /* Purple Shadow */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
98 {0, 40192, 47104, 53760}, /* Blue Hilight */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
99 {0, 29952, 36864, 44544}, /* Blue Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
100 {0, 57344, 49920, 40448}, /* Face Skin Medium */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
101 {0, 45824, 37120, 26880}, /* Face skin Dark */ |
|
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
102 {0, 33280, 26112, 18176}, /* Face Skin Shadow */ |
|
10812
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10810
diff
changeset
|
103 {0, 57088, 16896, 7680}, /* Accent Red */ |
|
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10810
diff
changeset
|
104 {0, 39168, 0, 0}, /* Accent Red Dark */ |
|
10117
d520ab74fe8f
[gaim-migrate @ 11154]
Luke Schierer <lschiere@pidgin.im>
parents:
10116
diff
changeset
|
105 {0, 17920, 40960, 17920}, /* Accent Green */ |
|
10812
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10810
diff
changeset
|
106 {0, 9728, 50944, 9728} /* Accent Green Dark */ |
| 4359 | 107 }; |
| 6291 | 108 |
| 4359 | 109 #define NUM_NICK_COLORS (sizeof(nick_colors) / sizeof(*nick_colors)) |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
110 #endif |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
111 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
112 /* From http://www.w3.org/TR/AERT#color-contrast */ |
|
12354
709548d845a1
[gaim-migrate @ 14658]
Luke Schierer <lschiere@pidgin.im>
parents:
12353
diff
changeset
|
113 #define MIN_BRIGHTNESS_CONTRAST 75 |
|
709548d845a1
[gaim-migrate @ 14658]
Luke Schierer <lschiere@pidgin.im>
parents:
12353
diff
changeset
|
114 #define MIN_COLOR_CONTRAST 200 |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
115 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
116 #define NUM_NICK_COLORS 220 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
117 static GdkColor *nick_colors = NULL; |
| 4359 | 118 |
| 11581 | 119 typedef struct { |
| 4359 | 120 GtkWidget *window; |
| 121 | |
| 122 GtkWidget *entry; | |
| 123 GtkWidget *message; | |
| 124 | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
125 GaimConversation *conv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
126 |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
127 } InviteBuddyInfo; |
| 4359 | 128 |
| 129 static GtkWidget *invite_dialog = NULL; | |
|
11206
86d3ce670f05
[gaim-migrate @ 13334]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11145
diff
changeset
|
130 static GtkWidget *warn_close_dialog = NULL; |
| 4359 | 131 |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
132 static GaimGtkWindow *hidden_convwin = NULL; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
133 static GList *window_list = NULL; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
134 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
135 |
| 11594 | 136 static gboolean update_send_to_selection(GaimGtkWindow *win); |
| 137 static void generate_send_to_items(GaimGtkWindow *win); | |
| 11581 | 138 |
| 4359 | 139 /* Prototypes. <-- because Paco-Paco hates this comment. */ |
| 10810 | 140 static void got_typing_keypress(GaimGtkConversation *gtkconv, gboolean first); |
| 11604 | 141 static void gray_stuff_out(GaimGtkConversation *gtkconv); |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
142 static GList *generate_invite_user_names(GaimConnection *gc); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
143 static void add_chat_buddy_common(GaimConversation *conv, const char *name, |
| 11869 | 144 GaimConvChatBuddyFlags flags, const char *alias, const char *old_name); |
| 9605 | 145 static gboolean tab_complete(GaimConversation *conv); |
| 11604 | 146 static void gaim_gtkconv_updated(GaimConversation *conv, GaimConvUpdateType type); |
| 11613 | 147 static void gtkconv_set_unseen(GaimGtkConversation *gtkconv, GaimUnseenState state); |
| 10810 | 148 static void update_typing_icon(GaimGtkConversation *gtkconv); |
|
4602
4128761bacb8
[gaim-migrate @ 4889]
Christian Hammond <chipx86@chipx86.com>
parents:
4598
diff
changeset
|
149 static char *item_factory_translate_func (const char *path, gpointer func_data); |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
150 gboolean gaim_gtkconv_has_focus(GaimConversation *conv); |
| 12335 | 151 static void gaim_gtkconv_custom_smiley_allocated(GdkPixbufLoader *loader, gpointer user_data); |
| 152 static void gaim_gtkconv_custom_smiley_closed(GdkPixbufLoader *loader, gpointer user_data); | |
|
12351
af152afe7bac
[gaim-migrate @ 14655]
Richard Laager <rlaager@wiktel.com>
parents:
12346
diff
changeset
|
153 static GdkColor* generate_nick_colors(guint numcolors, GdkColor background); |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
154 static gboolean color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast); |
| 4359 | 155 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
156 static GdkColor *get_nick_color(GaimGtkConversation *gtkconv, const char *name) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
157 static GdkColor col; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
158 GtkStyle *style = gtk_widget_get_style(gtkconv->imhtml); |
|
11480
e9251afae7b8
[gaim-migrate @ 13722]
Richard Laager <rlaager@wiktel.com>
parents:
11479
diff
changeset
|
159 float scale; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
160 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
161 col = nick_colors[g_str_hash(name) % NUM_NICK_COLORS]; |
|
11480
e9251afae7b8
[gaim-migrate @ 13722]
Richard Laager <rlaager@wiktel.com>
parents:
11479
diff
changeset
|
162 scale = ((1-(LUMINANCE(style->base[GTK_STATE_NORMAL]) / LUMINANCE(style->white))) * |
|
e9251afae7b8
[gaim-migrate @ 13722]
Richard Laager <rlaager@wiktel.com>
parents:
11479
diff
changeset
|
163 (LUMINANCE(style->white)/MAX(MAX(col.red, col.blue), col.green))); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
164 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
165 /* The colors are chosen to look fine on white; we should never have to darken */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
166 if (scale > 1) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
167 col.red *= scale; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
168 col.green *= scale; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
169 col.blue *= scale; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
170 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
171 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
172 return &col; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
173 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
174 |
| 4359 | 175 /************************************************************************** |
| 176 * Callbacks | |
| 177 **************************************************************************/ | |
| 10971 | 178 |
| 4359 | 179 static gint |
| 10810 | 180 close_conv_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
| 4359 | 181 { |
| 10810 | 182 GList *list = g_list_copy(gtkconv->convs), *l; |
| 11508 | 183 |
| 10810 | 184 l = list; |
| 185 while (l) { | |
| 186 GaimConversation *conv = l->data; | |
| 187 gaim_conversation_destroy(conv); | |
| 188 l = l->next; | |
| 189 } | |
| 11508 | 190 |
| 10810 | 191 g_list_free(list); |
| 11508 | 192 |
|
4361
25d5b2a7545f
[gaim-migrate @ 4627]
Christian Hammond <chipx86@chipx86.com>
parents:
4360
diff
changeset
|
193 return TRUE; |
| 4359 | 194 } |
| 195 | |
| 8914 | 196 static gboolean |
| 10810 | 197 size_allocate_cb(GtkWidget *w, GtkAllocation *allocation, GaimGtkConversation *gtkconv) |
| 8914 | 198 { |
| 10810 | 199 GaimConversation *conv = gtkconv->active_conv; |
| 11508 | 200 |
| 8914 | 201 if (!GTK_WIDGET_VISIBLE(w)) |
| 202 return FALSE; | |
| 203 | |
| 204 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
| 205 return FALSE; | |
| 206 | |
|
11620
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
207 /* I find that I resize the window when it has a bunch of conversations in it, mostly so that the |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
208 * tab bar will fit, but then I don't want new windows taking up the entire screen. I check to see |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
209 * if there is only one conversation in the window. This way we'll be setting new windows to the |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
210 * size of the last resized new window. */ |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
211 /* I think that the above justification is not the majority, and that the new tab resizing should |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
212 * negate it anyway. --luke */ |
| 11338 | 213 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 8914 | 214 { |
|
11453
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
215 if (w == gtkconv->imhtml) { |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
216 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_width", allocation->width); |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
217 gaim_prefs_set_int("/gaim/gtk/conversations/im/default_height", allocation->height); |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
218 } |
| 8914 | 219 if (w == gtkconv->entry) |
| 220 gaim_prefs_set_int("/gaim/gtk/conversations/im/entry_height", allocation->height); | |
| 221 } | |
| 11338 | 222 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 8914 | 223 { |
|
11453
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
224 if (w == gtkconv->imhtml) { |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
225 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_width", allocation->width); |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
226 gaim_prefs_set_int("/gaim/gtk/conversations/chat/default_height", allocation->height); |
|
d446fcc2c63b
[gaim-migrate @ 13692]
Luke Schierer <lschiere@pidgin.im>
parents:
11452
diff
changeset
|
227 } |
| 8914 | 228 if (w == gtkconv->entry) |
| 229 gaim_prefs_set_int("/gaim/gtk/conversations/chat/entry_height", allocation->height); | |
| 230 } | |
| 231 | |
| 232 return FALSE; | |
| 233 } | |
| 234 | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
235 static void |
| 10810 | 236 default_formatize(GaimGtkConversation *c) |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
237 { |
| 10810 | 238 GaimConversation *conv = c->active_conv; |
| 11508 | 239 |
| 10665 | 240 if (conv->features & GAIM_CONNECTION_HTML) |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
241 { |
|
11267
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
242 char *color; |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
243 GdkColor fg_color, bg_color; |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
244 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
245 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold") != GTK_IMHTML(c->entry)->edit.bold) |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
246 gtk_imhtml_toggle_bold(GTK_IMHTML(c->entry)); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
247 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
248 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic") != GTK_IMHTML(c->entry)->edit.italic) |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
249 gtk_imhtml_toggle_italic(GTK_IMHTML(c->entry)); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
250 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
251 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline") != GTK_IMHTML(c->entry)->edit.underline) |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
252 gtk_imhtml_toggle_underline(GTK_IMHTML(c->entry)); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
253 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
254 gtk_imhtml_toggle_fontface(GTK_IMHTML(c->entry), |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
255 gaim_prefs_get_string("/gaim/gtk/conversations/font_face")); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
256 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
257 if (!(conv->features & GAIM_CONNECTION_NO_FONTSIZE)) |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
258 gtk_imhtml_font_set_size(GTK_IMHTML(c->entry), |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
259 gaim_prefs_get_int("/gaim/gtk/conversations/font_size")); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
260 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
261 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), "") != 0) |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
262 { |
|
11267
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
263 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
264 &fg_color); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
265 color = g_strdup_printf("#%02x%02x%02x", |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
266 fg_color.red / 256, |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
267 fg_color.green / 256, |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
268 fg_color.blue / 256); |
| 8061 | 269 } |
|
11267
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
270 else |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
271 color = g_strdup(""); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
272 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
273 gtk_imhtml_toggle_forecolor(GTK_IMHTML(c->entry), color); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
274 g_free(color); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
275 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
276 if(!(conv->features & GAIM_CONNECTION_NO_BGCOLOR) && |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
277 strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), "") != 0) |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
278 { |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
279 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
280 &bg_color); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
281 color = g_strdup_printf("#%02x%02x%02x", |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
282 bg_color.red / 256, |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
283 bg_color.green / 256, |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
284 bg_color.blue / 256); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
285 } |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
286 else |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
287 color = g_strdup(""); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
288 |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
289 gtk_imhtml_toggle_background(GTK_IMHTML(c->entry), color); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
290 g_free(color); |
| 8677 | 291 |
| 9025 | 292 |
| 10665 | 293 if (conv->features & GAIM_CONNECTION_FORMATTING_WBFO) |
| 8677 | 294 gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(c->entry), TRUE); |
| 295 else | |
| 296 gtk_imhtml_set_whole_buffer_formatting_only(GTK_IMHTML(c->entry), FALSE); | |
| 8061 | 297 } |
| 298 } | |
| 9130 | 299 |
|
11275
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
300 static void |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
301 clear_formatting_cb(GtkIMHtml *imhtml, GaimGtkConversation *gtkconv) |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
302 { |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
303 default_formatize(gtkconv); |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
304 } |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
305 |
| 9130 | 306 static const char * |
| 307 gaim_gtk_get_cmd_prefix(void) | |
| 308 { | |
| 309 return "/"; | |
| 310 } | |
| 311 | |
| 9167 | 312 static GaimCmdRet |
| 9829 | 313 say_command_cb(GaimConversation *conv, |
| 314 const char *cmd, char **args, char **error, void *data) | |
| 315 { | |
| 11338 | 316 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 9829 | 317 gaim_conv_im_send(GAIM_CONV_IM(conv), args[0]); |
| 11338 | 318 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 9829 | 319 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), args[0]); |
| 320 | |
| 321 return GAIM_CMD_RET_OK; | |
| 322 } | |
| 323 | |
| 324 static GaimCmdRet | |
| 9167 | 325 me_command_cb(GaimConversation *conv, |
| 9597 | 326 const char *cmd, char **args, char **error, void *data) |
| 9167 | 327 { |
| 328 char *tmp; | |
| 329 | |
| 330 tmp = g_strdup_printf("/me %s", args[0]); | |
| 9175 | 331 |
| 11338 | 332 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 9167 | 333 gaim_conv_im_send(GAIM_CONV_IM(conv), tmp); |
| 11338 | 334 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 9167 | 335 gaim_conv_chat_send(GAIM_CONV_CHAT(conv), tmp); |
| 336 | |
| 337 g_free(tmp); | |
| 338 return GAIM_CMD_RET_OK; | |
| 339 } | |
| 340 | |
| 9212 | 341 static GaimCmdRet |
| 342 debug_command_cb(GaimConversation *conv, | |
| 9597 | 343 const char *cmd, char **args, char **error, void *data) |
| 9212 | 344 { |
| 345 char *tmp, *markup; | |
| 346 GaimCmdStatus status; | |
| 347 | |
| 348 if (!g_ascii_strcasecmp(args[0], "version")) { | |
| 349 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
|
350 markup = g_markup_escape_text(tmp, -1); |
| 9212 | 351 |
| 352 status = gaim_cmd_do_command(conv, tmp, markup, error); | |
| 353 | |
| 354 g_free(tmp); | |
| 355 g_free(markup); | |
| 356 return status; | |
| 357 } else { | |
| 358 gaim_conversation_write(conv, NULL, _("Supported debug options are: version"), | |
| 359 GAIM_MESSAGE_NO_LOG|GAIM_MESSAGE_ERROR, time(NULL)); | |
| 360 return GAIM_CMD_STATUS_OK; | |
| 361 } | |
| 362 } | |
| 363 | |
| 9213 | 364 static GaimCmdRet |
|
11145
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
365 clear_command_cb(GaimConversation *conv, |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
366 const char *cmd, char **args, char **error, void *data) |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
367 { |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
368 GaimGtkConversation *gtkconv = NULL; |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
369 |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
370 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
371 |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
372 gtk_imhtml_clear(GTK_IMHTML(gtkconv->imhtml)); |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
373 return GAIM_CMD_STATUS_OK; |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
374 } |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
375 |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
376 static GaimCmdRet |
| 9213 | 377 help_command_cb(GaimConversation *conv, |
| 9597 | 378 const char *cmd, char **args, char **error, void *data) |
| 9213 | 379 { |
| 9597 | 380 GList *l, *text; |
| 9213 | 381 GString *s; |
| 9597 | 382 |
| 383 if (args[0] != NULL) { | |
| 384 s = g_string_new(""); | |
| 385 text = gaim_cmd_help(conv, args[0]); | |
| 386 | |
| 387 if (text) { | |
| 388 for (l = text; l; l = l->next) | |
| 389 if (l->next) | |
| 9816 | 390 g_string_append_printf(s, "%s\n", (char *)l->data); |
| 9597 | 391 else |
| 9816 | 392 g_string_append_printf(s, "%s", (char *)l->data); |
| 9597 | 393 } else { |
| 394 g_string_append(s, _("No such command (in this context).")); | |
| 395 } | |
| 396 } else { | |
| 397 s = g_string_new(_("Use \"/help <command>\" for help on a specific command.\n" | |
| 398 "The following commands are available in this context:\n")); | |
| 399 | |
| 400 text = gaim_cmd_list(conv); | |
| 401 for (l = text; l; l = l->next) | |
| 9213 | 402 if (l->next) |
| 9597 | 403 g_string_append_printf(s, "%s, ", (char *)l->data); |
| 9213 | 404 else |
| 9597 | 405 g_string_append_printf(s, "%s.", (char *)l->data); |
| 9213 | 406 } |
| 407 | |
| 408 gaim_conversation_write(conv, NULL, s->str, GAIM_MESSAGE_NO_LOG, time(NULL)); | |
| 409 g_string_free(s, TRUE); | |
| 410 | |
| 411 return GAIM_CMD_STATUS_OK; | |
| 412 } | |
| 413 | |
| 4359 | 414 static void |
| 9374 | 415 send_history_add(GaimConversation *conv, const char *message) |
| 416 { | |
| 417 GList *first; | |
| 418 | |
| 419 first = g_list_first(conv->send_history); | |
| 420 | |
| 421 if (first->data) | |
| 422 g_free(first->data); | |
| 423 | |
| 424 first->data = g_strdup(message); | |
| 425 | |
| 426 conv->send_history = g_list_prepend(first, NULL); | |
| 427 } | |
| 428 | |
| 9832 | 429 static gboolean |
| 430 check_for_and_do_command(GaimConversation *conv) | |
| 431 { | |
| 432 GaimGtkConversation *gtkconv; | |
| 433 char *cmd; | |
| 434 const char *prefix; | |
| 435 GaimAccount *account; | |
| 436 GtkTextIter start; | |
| 437 | |
| 438 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 439 account = gaim_conversation_get_account(conv); | |
| 440 prefix = gaim_gtk_get_cmd_prefix(); | |
| 441 | |
| 442 cmd = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); | |
| 443 gtk_text_buffer_get_start_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &start); | |
| 444 | |
| 445 if (cmd && (strncmp(cmd, prefix, strlen(prefix)) == 0) | |
| 446 && !gtk_text_iter_get_child_anchor(&start)) { | |
| 447 GaimCmdStatus status; | |
| 448 char *error, *cmdline, *markup, *send_history; | |
| 449 GtkTextIter end; | |
| 450 | |
| 451 send_history = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); | |
| 452 send_history_add(conv, send_history); | |
| 453 g_free(send_history); | |
| 454 | |
| 455 cmdline = cmd + strlen(prefix); | |
| 456 | |
| 457 gtk_text_iter_forward_chars(&start, g_utf8_strlen(prefix, -1)); | |
| 458 gtk_text_buffer_get_end_iter(GTK_IMHTML(gtkconv->entry)->text_buffer, &end); | |
| 459 markup = gtk_imhtml_get_markup_range(GTK_IMHTML(gtkconv->entry), &start, &end); | |
| 460 status = gaim_cmd_do_command(conv, cmdline, markup, &error); | |
| 461 g_free(cmd); | |
| 462 g_free(markup); | |
| 463 | |
| 464 switch (status) { | |
| 465 case GAIM_CMD_STATUS_OK: | |
| 466 return TRUE; | |
| 467 case GAIM_CMD_STATUS_NOT_FOUND: | |
| 468 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/passthrough_unknown_commands")) { | |
| 469 gaim_conversation_write(conv, "", _("No such command."), | |
| 470 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
| 471 | |
| 472 return TRUE; | |
| 473 } | |
| 474 return FALSE; | |
| 475 case GAIM_CMD_STATUS_WRONG_ARGS: | |
| 476 gaim_conversation_write(conv, "", _("Syntax Error: You typed the wrong number of arguments " | |
| 477 "to that command."), | |
| 478 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
| 479 return TRUE; | |
| 480 case GAIM_CMD_STATUS_FAILED: | |
| 481 gaim_conversation_write(conv, "", error ? error : _("Your command failed for an unknown reason."), | |
| 482 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
| 483 if(error) | |
| 484 g_free(error); | |
| 485 return TRUE; | |
| 486 case GAIM_CMD_STATUS_WRONG_TYPE: | |
| 11338 | 487 if(gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 10843 | 488 gaim_conversation_write(conv, "", _("That command only works in chats, not IMs."), |
| 9832 | 489 GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 490 else | |
| 10843 | 491 gaim_conversation_write(conv, "", _("That command only works in IMs, not chats."), |
| 9832 | 492 GAIM_MESSAGE_NO_LOG, time(NULL)); |
| 493 return TRUE; | |
| 494 case GAIM_CMD_STATUS_WRONG_PRPL: | |
| 495 gaim_conversation_write(conv, "", _("That command doesn't work on this protocol."), | |
| 496 GAIM_MESSAGE_NO_LOG, time(NULL)); | |
| 497 return TRUE; | |
| 498 } | |
| 499 } | |
| 500 | |
| 501 g_free(cmd); | |
| 502 return FALSE; | |
| 503 } | |
| 504 | |
| 9374 | 505 static void |
| 10810 | 506 send_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 4359 | 507 { |
| 10810 | 508 GaimConversation *conv = gtkconv->active_conv; |
| 8655 | 509 GaimAccount *account; |
| 8677 | 510 GaimConnection *gc; |
| 12216 | 511 GaimMessageFlags flags = 0; |
| 8448 | 512 char *buf, *clean; |
| 4359 | 513 |
| 8655 | 514 account = gaim_conversation_get_account(conv); |
| 9130 | 515 |
| 9471 | 516 if (!gaim_account_is_connected(account)) |
| 517 return; | |
| 518 | |
| 11338 | 519 if ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) && |
| 9474 | 520 gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv))) |
| 9471 | 521 return; |
| 522 | |
| 9832 | 523 if (check_for_and_do_command(conv)) { |
| 524 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); | |
| 525 return; | |
| 9130 | 526 } |
| 527 | |
| 8442 | 528 buf = gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); |
| 8962 | 529 clean = gtk_imhtml_get_text(GTK_IMHTML(gtkconv->entry), NULL, NULL); |
| 8448 | 530 |
| 4359 | 531 gtk_widget_grab_focus(gtkconv->entry); |
| 532 | |
| 8448 | 533 if (strlen(clean) == 0) { |
| 534 g_free(clean); | |
| 4359 | 535 return; |
| 536 } | |
| 537 | |
| 12272 | 538 gaim_idle_touch(); |
| 539 | |
| 12216 | 540 /* XXX: is there a better way to tell if the message has images? */ |
| 541 if (GTK_IMHTML(gtkconv->entry)->im_images != NULL) | |
| 542 flags |= GAIM_MESSAGE_IMAGES; | |
| 543 | |
| 8677 | 544 gc = gaim_account_get_connection(account); |
| 10665 | 545 if (gc && (conv->features & GAIM_CONNECTION_NO_NEWLINES)) { |
| 8677 | 546 char **bufs; |
| 547 int i; | |
| 548 | |
| 549 bufs = gtk_imhtml_get_markup_lines(GTK_IMHTML(gtkconv->entry)); | |
| 550 for (i = 0; bufs[i]; i++) { | |
| 9374 | 551 send_history_add(conv, bufs[i]); |
| 11338 | 552 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 12216 | 553 gaim_conv_im_send_with_flags(GAIM_CONV_IM(conv), bufs[i], flags); |
| 11338 | 554 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 12216 | 555 gaim_conv_chat_send_with_flags(GAIM_CONV_CHAT(conv), bufs[i], flags); |
| 8677 | 556 } |
| 557 | |
| 558 g_strfreev(bufs); | |
| 559 | |
| 560 } else { | |
| 9374 | 561 send_history_add(conv, buf); |
| 11338 | 562 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 12216 | 563 gaim_conv_im_send_with_flags(GAIM_CONV_IM(conv), buf, flags); |
| 11338 | 564 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 12216 | 565 gaim_conv_chat_send_with_flags(GAIM_CONV_CHAT(conv), buf, flags); |
| 8677 | 566 } |
| 4359 | 567 |
| 8677 | 568 g_free(clean); |
| 4359 | 569 g_free(buf); |
| 570 | |
| 8061 | 571 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
| 11613 | 572 gtkconv_set_unseen(gtkconv, GAIM_UNSEEN_NONE); |
| 4359 | 573 } |
| 574 | |
| 575 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
576 add_remove_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 4359 | 577 { |
|
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
578 GaimAccount *account; |
| 4359 | 579 const char *name; |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
580 GaimConversation *conv = gtkconv->active_conv; |
| 4359 | 581 |
|
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
582 account = gaim_conversation_get_account(conv); |
|
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
583 name = gaim_conversation_get_name(conv); |
| 7879 | 584 |
| 11338 | 585 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 7859 | 586 GaimBuddy *b; |
| 587 | |
| 588 b = gaim_find_buddy(account, name); | |
| 589 if (b != NULL) | |
| 9730 | 590 gaim_gtkdialogs_remove_buddy(b); |
| 7859 | 591 else if (account != NULL && gaim_account_is_connected(account)) |
| 592 gaim_blist_request_add_buddy(account, (char *)name, NULL, NULL); | |
| 11338 | 593 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
| 7859 | 594 GaimChat *c; |
| 595 | |
| 596 c = gaim_blist_find_chat(account, name); | |
| 597 if (c != NULL) | |
| 9730 | 598 gaim_gtkdialogs_remove_chat(c); |
| 7859 | 599 else if (account != NULL && gaim_account_is_connected(account)) |
| 9754 | 600 gaim_blist_request_add_chat(account, NULL, NULL, name); |
| 7859 | 601 } |
| 4359 | 602 |
| 603 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
| 604 } | |
| 605 | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
606 static void chat_do_info(GaimGtkConversation *gtkconv, const char *who) |
| 7975 | 607 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
608 GaimConversation *conv = gtkconv->active_conv; |
| 7975 | 609 GaimPluginProtocolInfo *prpl_info = NULL; |
| 610 GaimConnection *gc; | |
| 611 | |
| 612 if ((gc = gaim_conversation_get_gc(conv))) { | |
| 613 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 614 | |
| 615 /* | |
| 616 * If there are special needs for getting info on users in | |
| 617 * buddy chat "rooms"... | |
| 618 */ | |
| 619 if (prpl_info->get_cb_info != NULL) | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
620 { |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
621 prpl_info->get_cb_info(gc, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
622 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
623 } |
| 7975 | 624 else |
| 625 prpl_info->get_info(gc, who); | |
| 626 } | |
| 627 } | |
| 628 | |
| 629 | |
| 4359 | 630 static void |
| 10810 | 631 info_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 4359 | 632 { |
| 10810 | 633 GaimConversation *conv = gtkconv->active_conv; |
| 4359 | 634 |
| 11338 | 635 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 7879 | 636 serv_get_info(gaim_conversation_get_gc(conv), |
| 637 gaim_conversation_get_name(conv)); | |
| 638 | |
| 639 gtk_widget_grab_focus(gtkconv->entry); | |
| 11338 | 640 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
| 7879 | 641 /* Get info of the person currently selected in the GtkTreeView */ |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
642 GaimGtkChatPane *gtkchat; |
| 4359 | 643 GtkTreeIter iter; |
| 644 GtkTreeModel *model; | |
| 645 GtkTreeSelection *sel; | |
| 9554 | 646 char *name; |
| 4359 | 647 |
| 648 gtkchat = gtkconv->u.chat; | |
| 649 | |
| 650 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
| 651 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); | |
| 652 | |
| 653 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
| 9498 | 654 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
| 4359 | 655 else |
| 656 return; | |
| 657 | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
658 chat_do_info(gtkconv, name); |
| 9554 | 659 g_free(name); |
| 4359 | 660 } |
| 661 } | |
| 662 | |
| 663 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
664 block_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 4359 | 665 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
666 GaimConversation *conv = gtkconv->active_conv; |
|
6371
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
667 GaimAccount *account; |
|
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
668 |
|
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
669 account = gaim_conversation_get_account(conv); |
|
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
670 |
|
8f94cce8faa5
[gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents:
6291
diff
changeset
|
671 if (account != NULL && gaim_account_is_connected(account)) |
|
6399
d726a36628e8
[gaim-migrate @ 6904]
Christian Hammond <chipx86@chipx86.com>
parents:
6398
diff
changeset
|
672 gaim_gtk_request_add_block(account, gaim_conversation_get_name(conv)); |
| 4359 | 673 |
| 674 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
| 675 } | |
| 676 | |
| 677 static void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
678 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info) |
| 4359 | 679 { |
| 680 const char *buddy, *message; | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
681 GaimGtkConversation *gtkconv; |
| 4359 | 682 |
| 683 gtkconv = GAIM_GTK_CONVERSATION(info->conv); | |
| 684 | |
| 685 if (resp == GTK_RESPONSE_OK) { | |
| 686 buddy = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry)); | |
| 687 message = gtk_entry_get_text(GTK_ENTRY(info->message)); | |
| 688 | |
| 10113 | 689 if (!g_ascii_strcasecmp(buddy, "")) |
| 4359 | 690 return; |
| 691 | |
| 692 serv_chat_invite(gaim_conversation_get_gc(info->conv), | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
693 gaim_conv_chat_get_id(GAIM_CONV_CHAT(info->conv)), |
| 4359 | 694 message, buddy); |
| 695 } | |
| 696 | |
| 697 gtk_widget_destroy(invite_dialog); | |
| 698 invite_dialog = NULL; | |
| 699 | |
| 700 g_free(info); | |
| 701 } | |
| 702 | |
| 703 static void | |
| 9909 | 704 invite_dnd_recv(GtkWidget *widget, GdkDragContext *dc, gint x, gint y, |
| 705 GtkSelectionData *sd, guint inf, guint t, gpointer data) | |
| 706 { | |
| 707 InviteBuddyInfo *info = (InviteBuddyInfo *)data; | |
| 708 const char *convprotocol; | |
| 709 | |
| 710 convprotocol = gaim_account_get_protocol_id(gaim_conversation_get_account(info->conv)); | |
| 711 | |
| 712 if (sd->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE)) | |
| 713 { | |
| 714 GaimBlistNode *node = NULL; | |
| 715 GaimBuddy *buddy; | |
| 716 | |
| 717 memcpy(&node, sd->data, sizeof(node)); | |
| 718 | |
| 719 if (GAIM_BLIST_NODE_IS_CONTACT(node)) | |
| 720 buddy = gaim_contact_get_priority_buddy((GaimContact *)node); | |
| 721 else if (GAIM_BLIST_NODE_IS_BUDDY(node)) | |
| 722 buddy = (GaimBuddy *)node; | |
| 723 else | |
| 724 return; | |
| 725 | |
| 726 if (strcmp(convprotocol, gaim_account_get_protocol_id(buddy->account))) | |
| 727 { | |
| 728 gaim_notify_error(NULL, NULL, | |
| 729 _("That buddy is not on the same protocol as this " | |
| 10843 | 730 "chat."), NULL); |
| 9909 | 731 } |
| 732 else | |
| 733 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry), buddy->name); | |
| 734 | |
| 735 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); | |
| 736 } | |
| 737 else if (sd->target == gdk_atom_intern("application/x-im-contact", FALSE)) | |
| 738 { | |
| 739 char *protocol = NULL; | |
| 740 char *username = NULL; | |
| 741 GaimAccount *account; | |
| 742 | |
| 11137 | 743 if (gaim_gtk_parse_x_im_contact((const char *)sd->data, FALSE, &account, |
| 9909 | 744 &protocol, &username, NULL)) |
| 745 { | |
| 746 if (account == NULL) | |
| 747 { | |
| 748 gaim_notify_error(NULL, NULL, | |
| 749 _("You are not currently signed on with an account that " | |
| 750 "can invite that buddy."), NULL); | |
| 751 } | |
| 752 else if (strcmp(convprotocol, gaim_account_get_protocol_id(account))) | |
| 753 { | |
| 754 gaim_notify_error(NULL, NULL, | |
| 755 _("That buddy is not on the same protocol as this " | |
| 10843 | 756 "chat."), NULL); |
| 9909 | 757 } |
| 758 else | |
| 759 { | |
| 760 gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry), username); | |
| 761 } | |
| 762 } | |
| 763 | |
| 764 if (username != NULL) g_free(username); | |
| 765 if (protocol != NULL) g_free(protocol); | |
| 766 | |
| 767 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); | |
| 768 } | |
| 769 } | |
| 770 | |
| 771 static const GtkTargetEntry dnd_targets[] = | |
| 772 { | |
| 773 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, 0}, | |
| 774 {"application/x-im-contact", 0, 1} | |
| 775 }; | |
| 776 | |
| 777 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
778 invite_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 4359 | 779 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
780 GaimConversation *conv = gtkconv->active_conv; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
781 InviteBuddyInfo *info = NULL; |
| 4359 | 782 |
| 783 if (invite_dialog == NULL) { | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
784 GaimConnection *gc; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
785 GaimGtkWindow *gtkwin; |
| 4359 | 786 GtkWidget *label; |
| 787 GtkWidget *vbox, *hbox; | |
| 788 GtkWidget *table; | |
| 789 GtkWidget *img; | |
| 790 | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
791 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, |
| 11581 | 792 GTK_ICON_SIZE_DIALOG); |
| 4359 | 793 |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
794 info = g_new0(InviteBuddyInfo, 1); |
| 4359 | 795 info->conv = conv; |
| 796 | |
| 11581 | 797 gc = gaim_conversation_get_gc(conv); |
| 798 gtkwin = gaim_gtkconv_get_window(gtkconv); | |
| 4359 | 799 |
| 800 /* Create the new dialog. */ | |
| 801 invite_dialog = gtk_dialog_new_with_buttons( | |
| 7859 | 802 _("Invite Buddy Into Chat Room"), |
| 7879 | 803 GTK_WINDOW(gtkwin->window), 0, |
| 804 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
|
9443
3584cdab1d0b
[gaim-migrate @ 10264]
Christian Hammond <chipx86@chipx86.com>
parents:
9374
diff
changeset
|
805 GAIM_STOCK_INVITE, GTK_RESPONSE_OK, NULL); |
| 4359 | 806 |
| 807 gtk_dialog_set_default_response(GTK_DIALOG(invite_dialog), | |
| 11581 | 808 GTK_RESPONSE_OK); |
| 11243 | 809 gtk_container_set_border_width(GTK_CONTAINER(invite_dialog), GAIM_HIG_BOX_SPACE); |
| 4359 | 810 gtk_window_set_resizable(GTK_WINDOW(invite_dialog), FALSE); |
| 811 gtk_dialog_set_has_separator(GTK_DIALOG(invite_dialog), FALSE); | |
| 812 | |
| 9909 | 813 info->window = GTK_WIDGET(invite_dialog); |
| 814 | |
| 4359 | 815 /* Setup the outside spacing. */ |
| 816 vbox = GTK_DIALOG(invite_dialog)->vbox; | |
| 817 | |
| 11243 | 818 gtk_box_set_spacing(GTK_BOX(vbox), GAIM_HIG_BORDER); |
| 819 gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BOX_SPACE); | |
| 4359 | 820 |
| 821 /* Setup the inner hbox and put the dialog's icon in it. */ | |
| 11243 | 822 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); |
| 4359 | 823 gtk_container_add(GTK_CONTAINER(vbox), hbox); |
| 824 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 825 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 826 | |
| 827 /* Setup the right vbox. */ | |
| 828 vbox = gtk_vbox_new(FALSE, 0); | |
| 829 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 830 | |
| 831 /* Put our happy label in it. */ | |
| 832 label = gtk_label_new(_("Please enter the name of the user you wish " | |
| 833 "to invite, along with an optional invite " | |
| 834 "message.")); | |
| 835 gtk_widget_set_size_request(label, 350, -1); | |
| 836 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 837 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 838 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
| 839 | |
| 840 /* hbox for the table, and to give it some spacing on the left. */ | |
| 11243 | 841 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 4359 | 842 gtk_container_add(GTK_CONTAINER(vbox), hbox); |
| 843 | |
| 844 /* Setup the table we're going to use to lay stuff out. */ | |
| 845 table = gtk_table_new(2, 2, FALSE); | |
| 11243 | 846 gtk_table_set_row_spacings(GTK_TABLE(table), GAIM_HIG_BOX_SPACE); |
| 847 gtk_table_set_col_spacings(GTK_TABLE(table), GAIM_HIG_BOX_SPACE); | |
| 848 gtk_container_set_border_width(GTK_CONTAINER(table), GAIM_HIG_BORDER); | |
| 4359 | 849 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); |
| 850 | |
| 851 /* Now the Buddy label */ | |
| 852 label = gtk_label_new(NULL); | |
| 853 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Buddy:")); | |
| 854 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 855 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
| 856 | |
| 857 /* Now the Buddy drop-down entry field. */ | |
| 858 info->entry = gtk_combo_new(); | |
| 859 gtk_combo_set_case_sensitive(GTK_COMBO(info->entry), FALSE); | |
| 860 gtk_entry_set_activates_default( | |
| 861 GTK_ENTRY(GTK_COMBO(info->entry)->entry), TRUE); | |
| 862 | |
| 863 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); | |
| 864 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->entry); | |
| 865 | |
| 866 /* Fill in the names. */ | |
| 867 gtk_combo_set_popdown_strings(GTK_COMBO(info->entry), | |
| 868 generate_invite_user_names(gc)); | |
| 869 | |
| 870 | |
| 871 /* Now the label for "Message" */ | |
| 872 label = gtk_label_new(NULL); | |
| 873 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Message:")); | |
| 874 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 875 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
| 876 | |
| 877 | |
| 878 /* And finally, the Message entry field. */ | |
| 879 info->message = gtk_entry_new(); | |
| 880 gtk_entry_set_activates_default(GTK_ENTRY(info->message), TRUE); | |
| 881 | |
| 882 gtk_table_attach_defaults(GTK_TABLE(table), info->message, 1, 2, 1, 2); | |
| 883 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->message); | |
| 884 | |
| 885 /* Connect the signals. */ | |
| 886 g_signal_connect(G_OBJECT(invite_dialog), "response", | |
| 887 G_CALLBACK(do_invite), info); | |
| 9909 | 888 /* Setup drag-and-drop */ |
| 889 gtk_drag_dest_set(info->window, | |
| 890 GTK_DEST_DEFAULT_MOTION | | |
| 891 GTK_DEST_DEFAULT_DROP, | |
| 892 dnd_targets, | |
| 893 sizeof(dnd_targets) / sizeof(GtkTargetEntry), | |
| 894 GDK_ACTION_COPY); | |
| 895 gtk_drag_dest_set(info->entry, | |
| 896 GTK_DEST_DEFAULT_MOTION | | |
| 897 GTK_DEST_DEFAULT_DROP, | |
| 898 dnd_targets, | |
| 899 sizeof(dnd_targets) / sizeof(GtkTargetEntry), | |
| 900 GDK_ACTION_COPY); | |
| 901 | |
| 902 g_signal_connect(G_OBJECT(info->window), "drag_data_received", | |
| 903 G_CALLBACK(invite_dnd_recv), info); | |
| 904 g_signal_connect(G_OBJECT(info->entry), "drag_data_received", | |
| 905 G_CALLBACK(invite_dnd_recv), info); | |
| 906 | |
| 4359 | 907 } |
| 908 | |
| 909 gtk_widget_show_all(invite_dialog); | |
| 910 | |
| 911 if (info != NULL) | |
| 912 gtk_widget_grab_focus(GTK_COMBO(info->entry)->entry); | |
| 913 } | |
| 914 | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
915 static void |
| 7748 | 916 menu_new_conv_cb(gpointer data, guint action, GtkWidget *widget) |
| 917 { | |
| 9714 | 918 gaim_gtkdialogs_im(); |
| 7748 | 919 } |
| 920 | |
| 921 static void | |
| 9504 | 922 savelog_writefile_cb(void *user_data, const char *filename) |
| 9489 | 923 { |
| 9504 | 924 GaimConversation *conv = (GaimConversation *)user_data; |
| 9489 | 925 FILE *fp; |
| 926 const char *name; | |
| 10849 | 927 gchar *text; |
| 9489 | 928 |
|
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10572
diff
changeset
|
929 if ((fp = g_fopen(filename, "w+")) == NULL) { |
| 9504 | 930 gaim_notify_error(conv, NULL, _("Unable to open file."), NULL); |
| 9489 | 931 return; |
| 932 } | |
| 933 | |
| 934 name = gaim_conversation_get_name(conv); | |
| 10849 | 935 fprintf(fp, "<html>\n<head><title>%s</title></head>\n<body>", name); |
| 9489 | 936 fprintf(fp, _("<h1>Conversation with %s</h1>\n"), name); |
| 10849 | 937 |
| 938 text = gtk_imhtml_get_markup( | |
| 939 GTK_IMHTML(GAIM_GTK_CONVERSATION(conv)->imhtml)); | |
| 940 fprintf(fp, "%s", text); | |
| 941 g_free(text); | |
| 942 | |
| 943 fprintf(fp, "\n</body>\n</html>\n"); | |
| 9489 | 944 fclose(fp); |
| 945 } | |
| 946 | |
| 10849 | 947 /* |
| 948 * It would be kinda cool if this gave the option of saving a | |
| 949 * plaintext v. HTML file. | |
| 950 */ | |
| 9489 | 951 static void |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
952 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
953 { |
| 11581 | 954 GaimGtkWindow *win = data; |
| 955 GaimConversation *conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 9489 | 956 gchar *buf; |
| 957 | |
| 958 buf = g_strdup_printf("%s.html", gaim_normalize(conv->account, conv->name)); | |
| 9504 | 959 |
| 10849 | 960 gaim_request_file(conv, _("Save Conversation"), gaim_escape_filename(buf), |
| 961 TRUE, G_CALLBACK(savelog_writefile_cb), NULL, conv); | |
| 9489 | 962 |
| 963 g_free(buf); | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
964 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
965 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
966 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
967 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
968 { |
| 11581 | 969 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
970 GaimConversation *conv; |
| 9917 | 971 GaimLogType type; |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
972 GaimGtkBuddyList *gtkblist; |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
973 GdkCursor *cursor; |
|
10809
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
974 const char *name; |
|
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
975 GaimAccount *account; |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
976 GSList *buddies; |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
977 GSList *cur; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
978 |
| 11581 | 979 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
980 |
| 11338 | 981 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 9917 | 982 type = GAIM_LOG_IM; |
| 11338 | 983 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 9917 | 984 type = GAIM_LOG_CHAT; |
| 985 else | |
| 986 return; | |
| 987 | |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
988 gtkblist = gaim_gtk_blist_get_default_gtk_blist(); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
989 cursor = gdk_cursor_new(GDK_WATCH); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
990 |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
991 gdk_window_set_cursor(gtkblist->window->window, cursor); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
992 gdk_window_set_cursor(win->window->window, cursor); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
993 gdk_cursor_unref(cursor); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
994 while (gtk_events_pending()) |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
995 gtk_main_iteration(); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
996 |
|
10809
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
997 name = gaim_conversation_get_name(conv); |
|
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
998 account = gaim_conversation_get_account(conv); |
|
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
999 |
| 10845 | 1000 buddies = gaim_find_buddies(account, name); |
| 1001 for (cur = buddies; cur != NULL; cur = cur->next) | |
| 1002 { | |
| 1003 GaimBlistNode *node = cur->data; | |
| 10846 | 1004 if ((node != NULL) && ((node->prev != NULL) || (node->next != NULL))) |
| 10845 | 1005 { |
| 1006 gaim_gtk_log_show_contact((GaimContact *)node->parent); | |
| 1007 g_slist_free(buddies); | |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1008 gdk_window_set_cursor(gtkblist->window->window, NULL); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1009 gdk_window_set_cursor(win->window->window, NULL); |
| 10845 | 1010 return; |
| 1011 } | |
|
10809
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
1012 } |
| 10845 | 1013 g_slist_free(buddies); |
|
10809
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
1014 |
|
f9e01ccd6046
[gaim-migrate @ 12461]
Luke Schierer <lschiere@pidgin.im>
parents:
10807
diff
changeset
|
1015 gaim_gtk_log_show(type, name, account); |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1016 |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1017 gdk_window_set_cursor(gtkblist->window->window, NULL); |
|
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1018 gdk_window_set_cursor(win->window->window, NULL); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1019 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1020 |
| 8974 | 1021 static void |
| 1022 menu_clear_cb(gpointer data, guint action, GtkWidget *widget) | |
| 1023 { | |
| 11581 | 1024 GaimGtkWindow *win = data; |
| 8974 | 1025 GaimConversation *conv; |
| 1026 GaimGtkConversation *gtkconv; | |
| 1027 | |
| 11581 | 1028 conv = gaim_gtk_conv_window_get_active_conversation(win); |
| 8974 | 1029 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 1030 | |
| 1031 gtk_imhtml_clear(GTK_IMHTML(gtkconv->imhtml)); | |
| 1032 } | |
| 1033 | |
| 7295 | 1034 struct _search { |
| 1035 GaimGtkConversation *gtkconv; | |
| 1036 GtkWidget *entry; | |
| 1037 }; | |
| 1038 | |
| 7929 | 1039 static void do_search_cb(GtkWidget *widget, gint resp, struct _search *s) |
| 7295 | 1040 { |
| 7929 | 1041 switch (resp) { |
| 1042 case GTK_RESPONSE_OK: | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1043 gtk_imhtml_search_find(GTK_IMHTML(s->gtkconv->imhtml), |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1044 gtk_entry_get_text(GTK_ENTRY(s->entry))); |
| 7929 | 1045 break; |
| 1046 | |
| 1047 case GTK_RESPONSE_DELETE_EVENT: | |
| 1048 case GTK_RESPONSE_CLOSE: | |
| 1049 gtk_imhtml_search_clear(GTK_IMHTML(s->gtkconv->imhtml)); | |
| 1050 gtk_widget_destroy(s->gtkconv->dialogs.search); | |
| 1051 s->gtkconv->dialogs.search = NULL; | |
| 1052 g_free(s); | |
| 1053 break; | |
| 1054 } | |
| 7295 | 1055 } |
| 1056 | |
| 1057 static void | |
| 7751 | 1058 menu_find_cb(gpointer data, guint action, GtkWidget *widget) |
| 7295 | 1059 { |
| 11581 | 1060 GaimGtkWindow *gtkwin = data; |
| 1061 GaimConversation *conv = gaim_gtk_conv_window_get_active_conversation(gtkwin); | |
| 7295 | 1062 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 7929 | 1063 GtkWidget *hbox; |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1064 GtkWidget *img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1065 GTK_ICON_SIZE_DIALOG); |
| 7929 | 1066 GtkWidget *label; |
| 7295 | 1067 struct _search *s; |
| 1068 | |
| 7798 | 1069 if (gtkconv->dialogs.search) { |
| 1070 gtk_window_present(GTK_WINDOW(gtkconv->dialogs.search)); | |
| 7295 | 1071 return; |
| 7798 | 1072 } |
|
7300
41bbe5534441
[gaim-migrate @ 7884]
Christian Hammond <chipx86@chipx86.com>
parents:
7298
diff
changeset
|
1073 |
| 7295 | 1074 s = g_malloc(sizeof(struct _search)); |
| 1075 s->gtkconv = gtkconv; | |
| 7929 | 1076 |
| 1077 gtkconv->dialogs.search = gtk_dialog_new_with_buttons(_("Find"), | |
| 1078 GTK_WINDOW(gtkwin->window), GTK_DIALOG_DESTROY_WITH_PARENT, | |
| 1079 GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, | |
| 1080 GTK_STOCK_FIND, GTK_RESPONSE_OK, NULL); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1081 gtk_dialog_set_default_response(GTK_DIALOG(gtkconv->dialogs.search), |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1082 GTK_RESPONSE_OK); |
| 7929 | 1083 g_signal_connect(G_OBJECT(gtkconv->dialogs.search), "response", |
| 1084 G_CALLBACK(do_search_cb), s); | |
| 1085 | |
| 11243 | 1086 gtk_container_set_border_width(GTK_CONTAINER(gtkconv->dialogs.search), GAIM_HIG_BOX_SPACE); |
| 7929 | 1087 gtk_window_set_resizable(GTK_WINDOW(gtkconv->dialogs.search), FALSE); |
| 1088 gtk_dialog_set_has_separator(GTK_DIALOG(gtkconv->dialogs.search), FALSE); | |
| 11243 | 1089 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
|
1090 gtk_container_set_border_width( |
| 11243 | 1091 GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), GAIM_HIG_BOX_SPACE); |
| 1092 | |
| 1093 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BORDER); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1094 gtk_container_add(GTK_CONTAINER(GTK_DIALOG(gtkconv->dialogs.search)->vbox), |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1095 hbox); |
| 7929 | 1096 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); |
| 1097 | |
| 1098 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1099 gtk_dialog_set_response_sensitive(GTK_DIALOG(gtkconv->dialogs.search), |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1100 GTK_RESPONSE_OK, FALSE); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1101 |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1102 label = gtk_label_new(NULL); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1103 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Search for:")); |
| 7929 | 1104 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
| 1105 | |
| 1106 s->entry = gtk_entry_new(); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1107 gtk_entry_set_activates_default(GTK_ENTRY(s->entry), TRUE); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1108 gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(s->entry)); |
| 7929 | 1109 g_signal_connect(G_OBJECT(s->entry), "changed", |
| 1110 G_CALLBACK(gaim_gtk_set_sensitive_if_input), | |
| 1111 gtkconv->dialogs.search); | |
| 1112 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
|
1113 |
| 7295 | 1114 gtk_widget_show_all(gtkconv->dialogs.search); |
| 7929 | 1115 gtk_widget_grab_focus(s->entry); |
| 7295 | 1116 } |
| 1117 | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1118 static void |
| 9468 | 1119 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget) |
| 1120 { | |
| 11581 | 1121 GaimGtkWindow *win = data; |
| 1122 GaimConversation *conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 9468 | 1123 |
| 11338 | 1124 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 9468 | 1125 serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL); |
| 1126 } | |
| 1127 | |
| 1128 } | |
| 1129 | |
| 1130 static void | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1131 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1132 { |
| 11581 | 1133 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1134 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1135 |
| 11581 | 1136 conv = gaim_gtk_conv_window_get_active_gtkconv(win)->active_conv; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1137 |
|
12136
370f9d7868f9
[gaim-migrate @ 14436]
Richard Laager <rlaager@wiktel.com>
parents:
12132
diff
changeset
|
1138 gaim_gtk_pounce_editor_show(gaim_conversation_get_account(conv), |
|
370f9d7868f9
[gaim-migrate @ 14436]
Richard Laager <rlaager@wiktel.com>
parents:
12132
diff
changeset
|
1139 gaim_conversation_get_name(conv), NULL); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1140 } |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1141 |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1142 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1143 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1144 { |
| 11581 | 1145 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1146 GaimGtkConversation *gtkconv; |
| 8756 | 1147 GtkIMHtmlToolbar *toolbar; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1148 |
| 11581 | 1149 gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); |
| 8756 | 1150 toolbar = GTK_IMHTMLTOOLBAR(gtkconv->toolbar); |
| 1151 | |
| 1152 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->link), | |
| 1153 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->link))); | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1154 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1155 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1156 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1157 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1158 { |
| 11581 | 1159 GaimGtkWindow *win = data; |
| 8756 | 1160 GaimConversation *conv; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1161 GaimGtkConversation *gtkconv; |
| 8756 | 1162 GtkIMHtmlToolbar *toolbar; |
| 1163 | |
| 11581 | 1164 gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); |
| 1165 conv = gtkconv->active_conv; | |
| 8756 | 1166 toolbar = GTK_IMHTMLTOOLBAR(gtkconv->toolbar); |
| 1167 | |
| 1168 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(toolbar->image), | |
| 1169 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(toolbar->image))); | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1170 } |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1171 |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1172 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1173 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1174 { |
| 11581 | 1175 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1176 GaimConversation *conv; |
| 7879 | 1177 GaimAccount *account; |
| 1178 const char *name; | |
| 1179 | |
| 11581 | 1180 conv = gaim_gtk_conv_window_get_active_conversation(win); |
| 7879 | 1181 account = gaim_conversation_get_account(conv); |
| 1182 name = gaim_conversation_get_name(conv); | |
| 1183 | |
| 11338 | 1184 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 7879 | 1185 GaimBuddy *b; |
| 1186 | |
| 1187 b = gaim_find_buddy(account, name); | |
| 1188 if (b != NULL) | |
| 9730 | 1189 gaim_gtkdialogs_alias_buddy(b); |
| 11338 | 1190 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
| 7879 | 1191 GaimChat *c; |
| 1192 | |
| 1193 c = gaim_blist_find_chat(account, name); | |
| 1194 if (c != NULL) | |
| 9730 | 1195 gaim_gtkdialogs_alias_chat(c); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1196 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1197 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1198 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1199 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1200 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1201 { |
| 11581 | 1202 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1203 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1204 |
| 11581 | 1205 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1206 |
| 10810 | 1207 info_cb(NULL, GAIM_GTK_CONVERSATION(conv)); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1208 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1209 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1210 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1211 menu_invite_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1212 { |
| 11581 | 1213 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1214 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1215 |
| 11581 | 1216 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1217 |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1218 invite_cb(NULL, GAIM_GTK_CONVERSATION(conv)); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1219 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1220 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1221 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1222 menu_block_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1223 { |
| 11581 | 1224 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1225 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1226 |
| 11581 | 1227 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1228 |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1229 block_cb(NULL, GAIM_GTK_CONVERSATION(conv)); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1230 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1231 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1232 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1233 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1234 { |
| 11581 | 1235 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1236 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1237 |
| 11581 | 1238 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1239 |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1240 add_remove_cb(NULL, GAIM_GTK_CONVERSATION(conv)); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1241 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1242 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1243 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1244 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1245 { |
| 11581 | 1246 GaimGtkWindow *win = data; |
| 1247 | |
| 1248 close_conv_cb(NULL, GAIM_GTK_CONVERSATION(gaim_gtk_conv_window_get_active_conversation(win))); | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1249 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1250 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1251 static void |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1252 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1253 { |
| 11581 | 1254 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1255 GaimConversation *conv; |
|
11805
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1256 gboolean logging; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1257 |
| 11581 | 1258 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1259 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1260 if (conv == NULL) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1261 return; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1262 |
|
11805
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1263 logging = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1264 |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1265 if (logging == gaim_conversation_is_logging(conv)) |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1266 return; |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1267 |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1268 if (logging) |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1269 { |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1270 /* Enable logging first so the message below can be logged. */ |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1271 gaim_conversation_set_logging(conv, TRUE); |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1272 |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1273 gaim_conversation_write(conv, NULL, |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1274 _("Logging started. Future messages in this conversation will be logged."), |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1275 conv->logs ? (GAIM_MESSAGE_SYSTEM) : |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1276 (GAIM_MESSAGE_SYSTEM | GAIM_MESSAGE_NO_LOG), |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1277 time(NULL)); |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1278 } |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1279 else |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1280 { |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1281 gaim_conversation_write(conv, NULL, |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1282 _("Logging stopped. Future messages in this conversation will not be logged."), |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1283 conv->logs ? (GAIM_MESSAGE_SYSTEM) : |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1284 (GAIM_MESSAGE_SYSTEM | GAIM_MESSAGE_NO_LOG), |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1285 time(NULL)); |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1286 |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1287 /* Disable the logging second, so that the above message can be logged. */ |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1288 gaim_conversation_set_logging(conv, FALSE); |
|
615c2fd3d72e
[gaim-migrate @ 14096]
Richard Laager <rlaager@wiktel.com>
parents:
11799
diff
changeset
|
1289 } |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1290 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1291 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1292 static void |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1293 menu_toolbar_cb(gpointer data, guint action, GtkWidget *widget) |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1294 { |
| 11581 | 1295 GaimGtkWindow *win = data; |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1296 GaimConversation *conv; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1297 GaimGtkConversation *gtkconv; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1298 |
| 11581 | 1299 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1300 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1301 if (conv == NULL) |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1302 return; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1303 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1304 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1305 |
| 10377 | 1306 gaim_prefs_set_bool("/gaim/gtk/conversations/show_formatting_toolbar", |
| 11581 | 1307 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
|
1308 } |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1309 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
1310 static void |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1311 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1312 { |
| 11581 | 1313 GaimGtkWindow *win = data; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1314 GaimConversation *conv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1315 GaimGtkConversation *gtkconv; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1316 |
| 11581 | 1317 conv = gaim_gtk_conv_window_get_active_conversation(win); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1318 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1319 if (!conv) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1320 return; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1321 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1322 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1323 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1324 gtkconv->make_sound = |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1325 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1326 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1327 |
| 7961 | 1328 static void |
| 9188 | 1329 menu_timestamps_cb(gpointer data, guint action, GtkWidget *widget) |
| 1330 { | |
| 11581 | 1331 GaimGtkWindow *win = data; |
| 9188 | 1332 GaimConversation *conv; |
| 1333 GaimGtkConversation *gtkconv; | |
| 1334 | |
| 11581 | 1335 conv = gaim_gtk_conv_window_get_active_conversation(win); |
| 9188 | 1336 |
| 1337 if (!conv) | |
| 1338 return; | |
| 1339 | |
| 1340 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 1341 | |
| 12188 | 1342 gaim_prefs_set_bool("/gaim/gtk/conversations/show_timestamps", |
| 9188 | 1343 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); |
| 1344 } | |
| 1345 | |
| 1346 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1347 chat_do_im(GaimGtkConversation *gtkconv, const char *who) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1348 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1349 GaimConversation *conv = gtkconv->active_conv; |
| 10431 | 1350 GaimAccount *account; |
| 1351 GaimConnection *gc; | |
| 7961 | 1352 GaimPluginProtocolInfo *prpl_info = NULL; |
| 1353 char *real_who; | |
| 1354 | |
| 1355 account = gaim_conversation_get_account(conv); | |
| 10431 | 1356 g_return_if_fail(account != NULL); |
| 1357 | |
| 1358 gc = gaim_account_get_connection(account); | |
| 1359 g_return_if_fail(gc != NULL); | |
| 1360 | |
| 1361 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 1362 | |
| 1363 if (prpl_info && prpl_info->get_cb_real_name) | |
| 1364 real_who = prpl_info->get_cb_real_name(gc, | |
| 7961 | 1365 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); |
| 1366 else | |
| 1367 real_who = g_strdup(who); | |
| 1368 | |
| 1369 if(!real_who) | |
| 1370 return; | |
| 1371 | |
| 10431 | 1372 gaim_gtkdialogs_im_with_user(account, real_who); |
| 7961 | 1373 |
| 1374 g_free(real_who); | |
| 1375 } | |
| 1376 | |
| 1377 static void | |
| 10810 | 1378 chat_im_button_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 7961 | 1379 { |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1380 GaimGtkChatPane *gtkchat; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1381 GtkTreeIter iter; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1382 GtkTreeModel *model; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1383 GtkTreeSelection *sel; |
| 9554 | 1384 char *name; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1385 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1386 gtkchat = gtkconv->u.chat; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1387 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1388 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1389 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1390 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1391 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) |
| 9498 | 1392 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
|
1393 else |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1394 return; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1395 |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1396 chat_do_im(gtkconv, name); |
| 9554 | 1397 g_free(name); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1398 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1399 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1400 static void |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1401 ignore_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1402 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1403 GaimConversation *conv = gtkconv->active_conv; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1404 GaimGtkChatPane *gtkchat; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1405 GaimConvChat *chat; |
| 11869 | 1406 GaimConvChatBuddyFlags flags; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1407 GtkTreeIter iter; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1408 GtkTreeModel *model; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1409 GtkTreeSelection *sel; |
| 10504 | 1410 char *name; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1411 char *alias; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1412 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1413 chat = GAIM_CONV_CHAT(conv); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1414 gtkchat = gtkconv->u.chat; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1415 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1416 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1417 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1418 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1419 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1420 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1421 CHAT_USERS_NAME_COLUMN, &name, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1422 CHAT_USERS_ALIAS_COLUMN, &alias, |
| 11869 | 1423 CHAT_USERS_FLAGS_COLUMN, &flags, |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1424 -1); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1425 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1426 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1427 else |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1428 return; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1429 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1430 if (gaim_conv_chat_is_user_ignored(chat, name)) |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1431 gaim_conv_chat_unignore(chat, name); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1432 else |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
1433 gaim_conv_chat_ignore(chat, name); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1434 |
| 11869 | 1435 add_chat_buddy_common(conv, name, flags, alias, NULL); |
| 10504 | 1436 g_free(name); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1437 g_free(alias); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1438 } |
|
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 static void |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1441 menu_chat_im_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
| 7398 | 1442 { |
| 1443 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); | |
| 1444 | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1445 chat_do_im(gtkconv, who); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1446 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1447 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1448 static void |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1449 menu_chat_send_file_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
| 9468 | 1450 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1451 GaimConversation *conv = gtkconv->active_conv; |
| 9468 | 1452 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); |
| 1453 GaimConnection *gc = gaim_conversation_get_gc(conv); | |
| 1454 | |
| 1455 serv_send_file(gc, who, NULL); | |
| 1456 } | |
| 1457 | |
| 1458 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1459 menu_chat_info_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1460 { |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1461 char *who; |
|
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 who = g_object_get_data(G_OBJECT(w), "user_data"); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1464 |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1465 chat_do_info(gtkconv, who); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1466 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1467 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1468 static void |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1469 menu_chat_get_away_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1470 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1471 GaimConversation *conv = gtkconv->active_conv; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1472 GaimPluginProtocolInfo *prpl_info = NULL; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1473 GaimConnection *gc; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1474 char *who; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1475 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1476 gc = gaim_conversation_get_gc(conv); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1477 who = g_object_get_data(G_OBJECT(w), "user_data"); |
|
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 if (gc != NULL) { |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1480 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1481 |
|
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 * 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
|
1484 */ |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1485 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1486 if (prpl_info->get_cb_away != NULL) |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1487 { |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1488 prpl_info->get_cb_away(gc, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1489 gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), who); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1490 } |
|
5908
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 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1493 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1494 static void |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1495 menu_chat_add_remove_cb(GtkWidget *w, GaimGtkConversation *gtkconv) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1496 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1497 GaimConversation *conv = gtkconv->active_conv; |
|
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1498 GaimAccount *account; |
| 6695 | 1499 GaimBuddy *b; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1500 char *name; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1501 |
|
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1502 account = gaim_conversation_get_account(conv); |
|
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1503 name = g_object_get_data(G_OBJECT(w), "user_data"); |
|
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1504 b = gaim_find_buddy(account, name); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1505 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1506 if (b != NULL) |
| 9730 | 1507 gaim_gtkdialogs_remove_buddy(b); |
|
7060
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1508 else if (account != NULL && gaim_account_is_connected(account)) |
|
9946001989a3
[gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents:
7035
diff
changeset
|
1509 gaim_blist_request_add_buddy(account, name, NULL, NULL); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1510 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1511 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1512 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1513 |
| 8143 | 1514 static GtkWidget * |
| 10504 | 1515 create_chat_menu(GaimConversation *conv, const char *who, |
| 8143 | 1516 GaimPluginProtocolInfo *prpl_info, GaimConnection *gc) |
| 1517 { | |
| 1518 static GtkWidget *menu = NULL; | |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
1519 GaimConvChat *chat = GAIM_CONV_CHAT(conv); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1520 gboolean is_me = FALSE; |
| 8143 | 1521 GtkWidget *button; |
| 1522 | |
| 1523 /* | |
| 1524 * If a menu already exists, destroy it before creating a new one, | |
| 1525 * thus freeing-up the memory it occupied. | |
| 1526 */ | |
| 1527 if (menu) | |
| 1528 gtk_widget_destroy(menu); | |
| 1529 | |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
1530 if (!strcmp(chat->nick, gaim_normalize(conv->account, who))) |
|
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
1531 is_me = TRUE; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1532 |
| 8143 | 1533 menu = gtk_menu_new(); |
| 1534 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1535 if (!is_me) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1536 button = gaim_new_item_from_stock(menu, _("IM"), GAIM_STOCK_IM, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1537 G_CALLBACK(menu_chat_im_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1538 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1539 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1540 if (prpl_info && prpl_info->send_file |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1541 && (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who))) { |
| 11508 | 1542 button = gaim_new_item_from_stock(menu, _("Send File"), |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1543 GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(menu_chat_send_file_cb), |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1544 GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1545 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1546 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1547 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1548 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1549 button = gaim_new_item_from_stock(menu, _("Un-Ignore"), GAIM_STOCK_IGNORE, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1550 G_CALLBACK(ignore_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1551 else |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1552 button = gaim_new_item_from_stock(menu, _("Ignore"), GAIM_STOCK_IGNORE, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1553 G_CALLBACK(ignore_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
| 10504 | 1554 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
| 9468 | 1555 } |
| 9498 | 1556 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1557 if (prpl_info->get_info || prpl_info->get_cb_info) { |
| 10221 | 1558 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
|
1559 G_CALLBACK(menu_chat_info_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
| 10504 | 1560 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
| 8143 | 1561 } |
| 1562 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1563 if (prpl_info->get_cb_away) { |
| 10221 | 1564 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
|
1565 G_CALLBACK(menu_chat_get_away_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
| 10504 | 1566 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
| 8143 | 1567 } |
| 1568 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
1569 if (!is_me && !(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME)) { |
| 8143 | 1570 if (gaim_find_buddy(gc->account, who)) |
| 10221 | 1571 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
|
1572 G_CALLBACK(menu_chat_add_remove_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
| 8143 | 1573 else |
| 10221 | 1574 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
|
1575 G_CALLBACK(menu_chat_add_remove_cb), GAIM_GTK_CONVERSATION(conv), 0, 0, NULL); |
| 10504 | 1576 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free); |
| 8143 | 1577 } |
| 1578 | |
| 1579 return menu; | |
| 1580 } | |
| 1581 | |
| 1582 | |
| 1583 static gint | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1584 gtkconv_chat_popup_menu_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 8143 | 1585 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1586 GaimConversation *conv = gtkconv->active_conv; |
| 8143 | 1587 GaimPluginProtocolInfo *prpl_info = NULL; |
| 1588 GaimGtkChatPane *gtkchat; | |
| 1589 GaimConnection *gc; | |
| 1590 GaimAccount *account; | |
| 1591 GtkTreeSelection *sel; | |
| 1592 GtkTreeIter iter; | |
| 1593 GtkTreeModel *model; | |
| 1594 GtkWidget *menu; | |
| 1595 gchar *who; | |
| 1596 | |
| 1597 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 1598 gtkchat = gtkconv->u.chat; | |
| 1599 account = gaim_conversation_get_account(conv); | |
| 1600 gc = account->gc; | |
| 1601 | |
| 1602 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
| 1603 | |
| 1604 if (gc != NULL) | |
| 1605 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 1606 | |
| 1607 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list)); | |
| 1608 if(!gtk_tree_selection_get_selected(sel, NULL, &iter)) | |
| 1609 return FALSE; | |
| 1610 | |
| 9498 | 1611 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); |
| 8143 | 1612 menu = create_chat_menu (conv, who, prpl_info, gc); |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1613 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1614 gaim_gtk_treeview_popup_menu_position_func, widget, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1615 0, GDK_CURRENT_TIME); |
| 10504 | 1616 g_free(who); |
| 8143 | 1617 |
| 1618 return TRUE; | |
| 1619 } | |
| 1620 | |
| 1621 | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1622 static gint |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1623 right_click_chat_cb(GtkWidget *widget, GdkEventButton *event, |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1624 GaimGtkConversation *gtkconv) |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1625 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1626 GaimConversation *conv = gtkconv->active_conv; |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1627 GaimPluginProtocolInfo *prpl_info = NULL; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1628 GaimGtkChatPane *gtkchat; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1629 GaimConnection *gc; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1630 GaimAccount *account; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1631 GtkTreePath *path; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1632 GtkTreeIter iter; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1633 GtkTreeModel *model; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1634 GtkTreeViewColumn *column; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1635 gchar *who; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1636 int x, y; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1637 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1638 gtkchat = gtkconv->u.chat; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1639 account = gaim_conversation_get_account(conv); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1640 gc = account->gc; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1641 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1642 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1643 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1644 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
|
1645 event->x, event->y, &path, &column, &x, &y); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1646 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1647 if (path == NULL) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1648 return FALSE; |
|
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 if (gc != NULL) |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1651 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1652 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1653 gtk_tree_selection_select_path(GTK_TREE_SELECTION( |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1654 gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkchat->list))), path); |
|
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_model_get_iter(GTK_TREE_MODEL(model), &iter, path); |
| 9498 | 1657 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
|
1658 |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1659 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
1660 chat_do_im(gtkconv, who); |
| 7398 | 1661 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { |
| 8143 | 1662 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc); |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1663 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1664 event->button, event->time); |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1665 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1666 |
| 10504 | 1667 g_free(who); |
| 1668 gtk_tree_path_free(path); | |
| 1669 | |
|
5908
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1670 return TRUE; |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1671 } |
|
ed8a9a3bf7e2
[gaim-migrate @ 6340]
Christian Hammond <chipx86@chipx86.com>
parents:
5907
diff
changeset
|
1672 |
| 8133 | 1673 static void |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1674 move_to_next_unread_tab(GaimGtkConversation *gtkconv, gboolean forward) |
| 8133 | 1675 { |
| 10827 | 1676 GaimGtkConversation *next_gtkconv = NULL; |
| 11581 | 1677 GaimGtkWindow *win; |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1678 int index, i, total, found = 0; |
| 8133 | 1679 |
| 11581 | 1680 win = gtkconv->win; |
| 1681 index = gtk_notebook_page_num(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont); | |
| 1682 total = gaim_gtk_conv_window_get_gtkconv_count(win); | |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1683 |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1684 /* First check the tabs after (forward) or before (!forward) this position. */ |
|
11620
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
1685 for (i = forward ? index + 1 : index - 1; |
| 11581 | 1686 !found && (next_gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, i)); |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1687 forward ? i++ : i--) { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1688 if (i == -1) { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1689 break; |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1690 } |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1691 |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1692 if (next_gtkconv->unseen_state > 0) |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1693 found = 1; |
| 8133 | 1694 } |
| 11252 | 1695 |
|
10893
3f85d6fc763a
[gaim-migrate @ 12606]
Luke Schierer <lschiere@pidgin.im>
parents:
10892
diff
changeset
|
1696 if (!found) { |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1697 /* Now check from the beginning up to (forward) or end back to (!forward) this position. */ |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1698 for (i = forward ? 0 : total - 1; |
|
11620
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
1699 !found && (forward ? i < index : i >= 0) && |
|
fbc4eeab2227
[gaim-migrate @ 13894]
Luke Schierer <lschiere@pidgin.im>
parents:
11619
diff
changeset
|
1700 (next_gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, i)); |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1701 forward ? i++ : i--) { |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1702 |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1703 if (next_gtkconv->unseen_state > 0) |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
1704 found = 1; |
| 8133 | 1705 } |
| 10827 | 1706 |
|
10893
3f85d6fc763a
[gaim-migrate @ 12606]
Luke Schierer <lschiere@pidgin.im>
parents:
10892
diff
changeset
|
1707 if (!found) { |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1708 /* Okay, just grab the next (forward) or previous (!forward) conversation tab. */ |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1709 if (forward) { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1710 index++; |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1711 } |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1712 else { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1713 index = (index == 0) ? total - 1 : index - 1; |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1714 } |
| 11581 | 1715 if (!(next_gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, index))) |
| 1716 next_gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, 0); | |
| 10827 | 1717 } |
| 8133 | 1718 } |
| 1719 | |
| 10827 | 1720 if (next_gtkconv != NULL && next_gtkconv != gtkconv) |
| 11581 | 1721 gaim_gtk_conv_window_switch_gtkconv(win, next_gtkconv); |
| 8133 | 1722 } |
| 1723 | |
| 4359 | 1724 static gboolean |
| 8105 | 1725 entry_key_press_cb(GtkWidget *entry, GdkEventKey *event, gpointer data) |
| 4359 | 1726 { |
| 11581 | 1727 GaimGtkWindow *win; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1728 GaimConversation *conv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
1729 GaimGtkConversation *gtkconv; |
| 8105 | 1730 int curconv; |
| 1731 | |
| 10810 | 1732 gtkconv = (GaimGtkConversation *)data; |
| 10849 | 1733 conv = gtkconv->active_conv; |
| 11581 | 1734 win = gtkconv->win; |
| 1735 curconv = gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook)); | |
| 10839 | 1736 |
| 8105 | 1737 /* If CTRL was held down... */ |
| 1738 if (event->state & GDK_CONTROL_MASK) { | |
| 4359 | 1739 switch (event->keyval) { |
| 1740 case GDK_Up: | |
| 1741 if (!conv->send_history) | |
| 1742 break; | |
| 1743 | |
| 1744 if (!conv->send_history->prev) { | |
| 1745 GtkTextIter start, end; | |
| 1746 | |
| 1747 if (conv->send_history->data) | |
| 1748 g_free(conv->send_history->data); | |
| 1749 | |
| 1750 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, | |
| 1751 &start); | |
| 1752 gtk_text_buffer_get_end_iter(gtkconv->entry_buffer, &end); | |
| 1753 | |
| 1754 conv->send_history->data = | |
| 8506 | 1755 gtk_imhtml_get_markup(GTK_IMHTML(gtkconv->entry)); |
| 4359 | 1756 } |
| 8677 | 1757 |
|
11276
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1758 if (conv->send_history->next && conv->send_history->next->data) { |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1759 GObject *object; |
| 8677 | 1760 GtkTextIter iter; |
| 1761 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); | |
| 4359 | 1762 |
| 1763 conv->send_history = conv->send_history->next; | |
|
11276
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1764 |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1765 /* Block the signal to prevent application of default formatting. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1766 object = g_object_ref(G_OBJECT(gtkconv->entry)); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1767 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1768 NULL, gtkconv); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1769 /* Clear the formatting. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1770 gtk_imhtml_clear_formatting(GTK_IMHTML(gtkconv->entry)); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1771 /* Unblock the signal. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1772 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1773 NULL, gtkconv); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1774 g_object_unref(object); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1775 |
| 8061 | 1776 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1777 gtk_imhtml_append_text_with_images( |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1778 GTK_IMHTML(gtkconv->entry), conv->send_history->data, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1779 0, NULL); |
| 8677 | 1780 /* this is mainly just a hack so the formatting at the |
| 1781 * cursor gets picked up. */ | |
| 1782 gtk_text_buffer_get_end_iter(buffer, &iter); | |
| 1783 gtk_text_buffer_move_mark_by_name(buffer, "insert", &iter); | |
| 4359 | 1784 } |
| 1785 | |
| 8105 | 1786 return TRUE; |
| 4359 | 1787 break; |
| 1788 | |
| 1789 case GDK_Down: | |
| 1790 if (!conv->send_history) | |
| 1791 break; | |
| 1792 | |
|
11276
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1793 if (conv->send_history->prev && conv->send_history->prev->data) { |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1794 GObject *object; |
| 8677 | 1795 GtkTextIter iter; |
| 1796 GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); | |
| 8105 | 1797 |
| 4359 | 1798 conv->send_history = conv->send_history->prev; |
|
11276
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1799 |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1800 /* Block the signal to prevent application of default formatting. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1801 object = g_object_ref(G_OBJECT(gtkconv->entry)); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1802 g_signal_handlers_block_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1803 NULL, gtkconv); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1804 /* Clear the formatting. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1805 gtk_imhtml_clear_formatting(GTK_IMHTML(gtkconv->entry)); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1806 /* Unblock the signal. */ |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1807 g_signal_handlers_unblock_matched(object, G_SIGNAL_MATCH_DATA, 0, 0, NULL, |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1808 NULL, gtkconv); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1809 g_object_unref(object); |
|
17ebda61c6ce
[gaim-migrate @ 13463]
Richard Laager <rlaager@wiktel.com>
parents:
11275
diff
changeset
|
1810 |
| 8105 | 1811 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1812 gtk_imhtml_append_text_with_images( |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1813 GTK_IMHTML(gtkconv->entry), conv->send_history->data, |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1814 0, NULL); |
| 8677 | 1815 /* this is mainly just a hack so the formatting at the |
| 1816 * cursor gets picked up. */ | |
|
11267
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1817 if (*(char *)conv->send_history->data) { |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1818 gtk_text_buffer_get_end_iter(buffer, &iter); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1819 gtk_text_buffer_move_mark_by_name(buffer, "insert", &iter); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1820 } else { |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1821 /* Restore the default formatting */ |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1822 default_formatize(gtkconv); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
1823 } |
| 4359 | 1824 } |
| 1825 | |
| 8105 | 1826 return TRUE; |
| 4359 | 1827 break; |
| 8105 | 1828 |
| 8108 | 1829 case GDK_Page_Down: |
| 8143 | 1830 case ']': |
| 11581 | 1831 if (!gaim_gtk_conv_window_get_gtkconv_at_index(win, curconv + 1)) |
| 1832 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), 0); | |
| 10827 | 1833 else |
| 11581 | 1834 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), curconv + 1); |
| 8105 | 1835 return TRUE; |
| 1836 break; | |
| 1837 | |
| 8108 | 1838 case GDK_Page_Up: |
| 8143 | 1839 case '[': |
| 11581 | 1840 if (!gaim_gtk_conv_window_get_gtkconv_at_index(win, curconv - 1)) |
| 1841 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), -1); | |
| 10827 | 1842 else |
| 11581 | 1843 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), curconv - 1); |
| 8133 | 1844 return TRUE; |
| 1845 break; | |
| 1846 | |
| 8108 | 1847 case GDK_Tab: |
|
11467
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1848 case GDK_ISO_Left_Tab: |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1849 if (event->state & GDK_SHIFT_MASK) { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1850 move_to_next_unread_tab(gtkconv, FALSE); |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1851 } else { |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1852 move_to_next_unread_tab(gtkconv, TRUE); |
|
2952c6dfa738
[gaim-migrate @ 13707]
Luke Schierer <lschiere@pidgin.im>
parents:
11460
diff
changeset
|
1853 } |
| 8108 | 1854 |
| 1855 return TRUE; | |
| 1856 break; | |
| 1857 | |
| 11252 | 1858 case GDK_comma: |
| 11581 | 1859 gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), |
| 1860 gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), | |
| 11252 | 1861 curconv - 1); |
| 1862 break; | |
| 1863 | |
| 1864 case GDK_period: | |
| 11581 | 1865 gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), |
| 1866 gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), curconv), | |
| 11780 | 1867 #if GTK_CHECK_VERSION(2,2,0) |
| 11581 | 1868 (curconv + 1) % gtk_notebook_get_n_pages(GTK_NOTEBOOK(win->notebook))); |
| 11780 | 1869 #else |
| 1870 (curconv + 1) % g_list_length(GTK_NOTEBOOK(win->notebook)->children)); | |
| 1871 #endif | |
| 11252 | 1872 break; |
| 1873 | |
| 8105 | 1874 } /* End of switch */ |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1875 } |
| 8758 | 1876 |
| 8105 | 1877 /* If ALT (or whatever) was held down... */ |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1878 else if (event->state & GDK_MOD1_MASK) |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1879 { |
| 10864 | 1880 if (event->keyval > '0' && event->keyval <= '9') |
| 1881 { | |
|
12232
375f1f3817a8
[gaim-migrate @ 14534]
Richard Laager <rlaager@wiktel.com>
parents:
12216
diff
changeset
|
1882 guint switchto = event->keyval - '1'; |
| 11581 | 1883 if (switchto < gaim_gtk_conv_window_get_gtkconv_count(win)) |
| 1884 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), switchto); | |
| 4359 | 1885 |
| 1886 return TRUE; | |
| 1887 } | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1888 } |
| 8758 | 1889 |
| 8105 | 1890 /* If neither CTRL nor ALT were held down... */ |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1891 else |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1892 { |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1893 switch (event->keyval) |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1894 { |
|
10678
210e38f53b7b
[gaim-migrate @ 12221]
Etan Reisner <pidgin@unreliablesource.net>
parents:
10666
diff
changeset
|
1895 case GDK_Tab: |
| 9605 | 1896 return tab_complete(conv); |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1897 break; |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1898 |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1899 case GDK_Page_Up: |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1900 gtk_imhtml_page_up(GTK_IMHTML(gtkconv->imhtml)); |
| 8105 | 1901 return TRUE; |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1902 break; |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1903 |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1904 case GDK_Page_Down: |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1905 gtk_imhtml_page_down(GTK_IMHTML(gtkconv->imhtml)); |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1906 return TRUE; |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1907 break; |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1908 |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1909 } |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
1910 } |
| 4359 | 1911 return FALSE; |
| 1912 } | |
| 1913 | |
| 1914 /* | |
| 1915 * NOTE: | |
|
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
1916 * 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
|
1917 * further. I have no idea *why* we need this, but we do ... It |
| 4359 | 1918 * 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
|
1919 * going all the way down to the notebook. I suspect a bug in |
| 4359 | 1920 * GtkTextView, but I'm not ready to point any fingers yet. |
| 1921 */ | |
| 1922 static gboolean | |
| 1923 entry_stop_rclick_cb(GtkWidget *widget, GdkEventButton *event, gpointer data) | |
| 1924 { | |
| 1925 if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { | |
| 1926 /* Right single click */ | |
| 1927 g_signal_stop_emission_by_name(G_OBJECT(widget), "button_press_event"); | |
| 1928 | |
| 1929 return TRUE; | |
| 1930 } | |
| 1931 | |
| 1932 return FALSE; | |
| 1933 } | |
| 1934 | |
| 8173 | 1935 /* |
| 1936 * If someone tries to type into the conversation backlog of a | |
| 1937 * conversation window then we yank focus from the conversation backlog | |
| 1938 * and give it to the text entry box so that people can type | |
| 1939 * all the live long day and it will get entered into the entry box. | |
| 1940 */ | |
| 6057 | 1941 static gboolean |
| 8105 | 1942 refocus_entry_cb(GtkWidget *widget, GdkEventKey *event, gpointer data) |
| 6057 | 1943 { |
| 1944 GaimGtkConversation *gtkconv = data; | |
| 1945 | |
| 8237 | 1946 /* If we have a valid key for the conversation display, then exit */ |
| 8224 | 1947 if ((event->state & GDK_CONTROL_MASK) || |
| 8237 | 1948 (event->keyval == GDK_F10) || |
| 1949 (event->keyval == GDK_Shift_L) || | |
| 1950 (event->keyval == GDK_Shift_R) || | |
| 1951 (event->keyval == GDK_Escape) || | |
| 8177 | 1952 (event->keyval == GDK_Up) || |
| 1953 (event->keyval == GDK_Down) || | |
| 1954 (event->keyval == GDK_Left) || | |
| 8191 | 1955 (event->keyval == GDK_Right) || |
| 1956 (event->keyval == GDK_Home) || | |
| 9297 | 1957 (event->keyval == GDK_End) || |
| 1958 (event->keyval == GDK_Tab) || | |
| 1959 (event->keyval == GDK_ISO_Left_Tab)) | |
| 8177 | 1960 return FALSE; |
| 1961 | |
| 1962 if (event->type == GDK_KEY_RELEASE) | |
| 1963 gtk_widget_grab_focus(gtkconv->entry); | |
| 1964 | |
| 1965 gtk_widget_event(gtkconv->entry, (GdkEvent *)event); | |
| 1966 | |
| 1967 return TRUE; | |
| 6057 | 1968 } |
| 1969 | |
| 4359 | 1970 static void |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1971 gaim_gtkconv_set_active_conversation(GaimConversation *conv) |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1972 { |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1973 GaimGtkConversation *gtkconv; |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1974 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1975 g_return_if_fail(conv != NULL); |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1976 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1977 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1978 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1979 if (gtkconv->active_conv == conv) |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1980 return; |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1981 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1982 gaim_conversation_close_logs(gtkconv->active_conv); |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1983 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1984 gtkconv->active_conv = conv; |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1985 |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1986 gaim_conversation_set_logging(conv, |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1987 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(gtkconv->win->menu.logging))); |
|
12639
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
1988 |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
1989 gaim_signal_emit(gaim_gtk_conversations_get_handle(), "conversation-switched", conv); |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1990 } |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
1991 |
|
11911
fe12abd6b879
[gaim-migrate @ 14202]
Richard Laager <rlaager@wiktel.com>
parents:
11908
diff
changeset
|
1992 void |
| 11604 | 1993 gaim_gtkconv_switch_active_conversation(GaimConversation *conv) |
| 1994 { | |
| 1995 GaimGtkConversation *gtkconv; | |
| 1996 | |
| 1997 g_return_if_fail(conv != NULL); | |
| 1998 | |
| 1999 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 2000 | |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
2001 gaim_gtkconv_set_active_conversation(conv); |
| 11604 | 2002 |
| 2003 gray_stuff_out(gtkconv); | |
| 2004 update_typing_icon(gtkconv); | |
| 2005 | |
| 2006 gtk_window_set_title(GTK_WINDOW(gtkconv->win->window), | |
| 2007 gtk_label_get_text(GTK_LABEL(gtkconv->tab_label))); | |
| 2008 | |
|
11671
4ebd27e664c4
[gaim-migrate @ 13957]
Luke Schierer <lschiere@pidgin.im>
parents:
11669
diff
changeset
|
2009 gaim_conversation_update(conv, GAIM_CONV_UPDATE_ACCOUNT); |
| 11604 | 2010 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
| 2011 gaim_account_get_protocol_name(conv->account)); | |
| 2012 } | |
| 2013 | |
| 2014 static void | |
| 4673 | 2015 menu_conv_sel_send_cb(GObject *m, gpointer data) |
| 4359 | 2016 { |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
2017 GaimAccount *account = g_object_get_data(m, "gaim_account"); |
| 11594 | 2018 gchar *name = g_object_get_data(m, "gaim_buddy_name"); |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2019 GaimConversation *conv; |
| 4359 | 2020 |
|
10059
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
2021 if (gtk_check_menu_item_get_active((GtkCheckMenuItem*) m) == FALSE) |
|
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
2022 return; |
|
79fafe47d919
[gaim-migrate @ 11027]
Luke Schierer <lschiere@pidgin.im>
parents:
10053
diff
changeset
|
2023 |
| 11594 | 2024 conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, name); |
| 11604 | 2025 gaim_gtkconv_switch_active_conversation(conv); |
| 4359 | 2026 } |
| 2027 | |
| 2028 static void | |
| 2029 insert_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *position, | |
| 2030 gchar *new_text, gint new_text_length, gpointer user_data) | |
| 2031 { | |
| 10810 | 2032 GaimGtkConversation *gtkconv = (GaimGtkConversation *)user_data; |
| 2033 GaimConversation *conv; | |
| 2034 | |
| 2035 g_return_if_fail(gtkconv != NULL); | |
| 11508 | 2036 |
| 10810 | 2037 conv = gtkconv->active_conv; |
| 4359 | 2038 |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
2039 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing")) |
| 4359 | 2040 return; |
| 2041 | |
| 10810 | 2042 got_typing_keypress(gtkconv, (gtk_text_iter_is_start(position) && |
| 2043 gtk_text_iter_is_end(position))); | |
| 4359 | 2044 } |
| 2045 | |
| 2046 static void | |
| 2047 delete_text_cb(GtkTextBuffer *textbuffer, GtkTextIter *start_pos, | |
| 2048 GtkTextIter *end_pos, gpointer user_data) | |
| 2049 { | |
| 10810 | 2050 GaimGtkConversation *gtkconv = (GaimGtkConversation *)user_data; |
| 2051 GaimConversation *conv; | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2052 GaimConvIm *im; |
| 4359 | 2053 |
| 10810 | 2054 g_return_if_fail(gtkconv != NULL); |
| 11508 | 2055 |
| 10810 | 2056 conv = gtkconv->active_conv; |
| 4359 | 2057 |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
2058 if (!gaim_prefs_get_bool("/core/conversations/im/send_typing")) |
| 4359 | 2059 return; |
| 2060 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2061 im = GAIM_CONV_IM(conv); |
| 4359 | 2062 |
| 2063 if (gtk_text_iter_is_start(start_pos) && gtk_text_iter_is_end(end_pos)) { | |
| 2064 | |
| 2065 /* We deleted all the text, so turn off typing. */ | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2066 if (gaim_conv_im_get_type_again_timeout(im)) |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2067 gaim_conv_im_stop_type_again_timeout(im); |
| 4359 | 2068 |
| 2069 serv_send_typing(gaim_conversation_get_gc(conv), | |
| 6695 | 2070 gaim_conversation_get_name(conv), |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
2071 GAIM_NOT_TYPING); |
| 4359 | 2072 } |
| 2073 else { | |
| 2074 /* We're deleting, but not all of it, so it counts as typing. */ | |
| 10810 | 2075 got_typing_keypress(gtkconv, FALSE); |
| 4359 | 2076 } |
| 2077 } | |
| 2078 | |
| 8189 | 2079 /************************************************************************** |
| 2080 * A bunch of buddy icon functions | |
| 2081 **************************************************************************/ | |
| 11581 | 2082 GdkPixbuf * |
| 2083 gaim_gtkconv_get_tab_icon(GaimConversation *conv, gboolean small_icon) | |
| 7143 | 2084 { |
| 10116 | 2085 GaimAccount *account = NULL; |
| 2086 const char *name = NULL; | |
| 7143 | 2087 GdkPixbuf *status = NULL; |
| 2088 | |
| 10116 | 2089 g_return_val_if_fail(conv != NULL, NULL); |
| 2090 | |
| 2091 account = gaim_conversation_get_account(conv); | |
| 2092 name = gaim_conversation_get_name(conv); | |
| 2093 | |
| 2094 g_return_val_if_fail(account != NULL, NULL); | |
| 2095 g_return_val_if_fail(name != NULL, NULL); | |
| 2096 | |
| 11338 | 2097 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 7143 | 2098 GaimBuddy *b = gaim_find_buddy(account, name); |
| 2099 if (b != NULL) { | |
| 2100 status = gaim_gtk_blist_get_status_icon((GaimBlistNode*)b, | |
|
8755
d0364feabf96
[gaim-migrate @ 9510]
Christian Hammond <chipx86@chipx86.com>
parents:
8748
diff
changeset
|
2101 (small_icon ? GAIM_STATUS_ICON_SMALL : GAIM_STATUS_ICON_LARGE)); |
| 7143 | 2102 } |
| 2103 } | |
| 2104 | |
| 2105 if (!status) { | |
| 2106 GdkPixbuf *pixbuf; | |
| 10884 | 2107 pixbuf = gaim_gtk_create_prpl_icon(account); |
| 7143 | 2108 |
|
8755
d0364feabf96
[gaim-migrate @ 9510]
Christian Hammond <chipx86@chipx86.com>
parents:
8748
diff
changeset
|
2109 if (small_icon && pixbuf != NULL) |
|
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2110 { |
| 7143 | 2111 status = gdk_pixbuf_scale_simple(pixbuf, 15, 15, |
| 2112 GDK_INTERP_BILINEAR); | |
| 2113 g_object_unref(pixbuf); | |
| 2114 } | |
|
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2115 else |
|
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2116 status = pixbuf; |
| 7143 | 2117 } |
| 2118 return status; | |
| 2119 } | |
| 2120 | |
| 8189 | 2121 static void |
| 2122 update_tab_icon(GaimConversation *conv) | |
| 2123 { | |
| 2124 GaimGtkConversation *gtkconv; | |
| 11581 | 2125 GaimGtkWindow *win; |
| 8189 | 2126 GaimAccount *account; |
| 2127 const char *name; | |
| 2128 GdkPixbuf *status = NULL; | |
| 2129 | |
| 10116 | 2130 g_return_if_fail(conv != NULL); |
| 2131 | |
| 8189 | 2132 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 11581 | 2133 win = gtkconv->win; |
| 8189 | 2134 name = gaim_conversation_get_name(conv); |
| 2135 account = gaim_conversation_get_account(conv); | |
| 2136 | |
| 11581 | 2137 status = gaim_gtkconv_get_tab_icon(conv, TRUE); |
| 8189 | 2138 |
| 10116 | 2139 g_return_if_fail(status != NULL); |
| 2140 | |
| 8189 | 2141 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); |
| 2142 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); | |
| 2143 | |
|
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2144 if (status != NULL) |
|
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2145 g_object_unref(status); |
|
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2146 |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2147 if (gaim_gtk_conv_window_is_active_conversation(conv) && |
| 11338 | 2148 (gaim_conversation_get_type(conv) != GAIM_CONV_TYPE_IM || |
| 10504 | 2149 gtkconv->u.im->anim == NULL)) |
|
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2150 { |
| 11581 | 2151 status = gaim_gtkconv_get_tab_icon(conv, FALSE); |
| 2152 | |
| 2153 gtk_window_set_icon(GTK_WINDOW(win->window), status); | |
| 8189 | 2154 |
|
8748
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2155 if (status != NULL) |
|
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2156 g_object_unref(status); |
|
13d592f485d1
[gaim-migrate @ 9503]
Christian Hammond <chipx86@chipx86.com>
parents:
8735
diff
changeset
|
2157 } |
| 8189 | 2158 } |
| 2159 | |
| 2160 static gboolean | |
| 2161 redraw_icon(gpointer data) | |
| 2162 { | |
| 10810 | 2163 GaimGtkConversation *gtkconv = (GaimGtkConversation *)data; |
| 2164 GaimConversation *conv = gtkconv->active_conv; | |
| 9318 | 2165 GaimAccount *account; |
| 2166 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 8189 | 2167 |
| 2168 GdkPixbuf *buf; | |
| 2169 GdkPixbuf *scale; | |
| 2170 GdkPixmap *pm; | |
| 2171 GdkBitmap *bm; | |
| 2172 gint delay; | |
| 9318 | 2173 int scale_width, scale_height; |
| 8189 | 2174 |
| 2175 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 9318 | 2176 account = gaim_conversation_get_account(conv); |
| 2177 if(account && account->gc) | |
| 2178 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
| 8189 | 2179 |
| 2180 gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); | |
| 2181 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); | |
| 2182 | |
| 10483 | 2183 gaim_gtk_buddy_icon_get_scale_size(buf, prpl_info ? &prpl_info->icon_spec : |
| 9318 | 2184 NULL, &scale_width, &scale_height); |
| 2185 | |
| 2186 /* this code is ugly, and scares me */ | |
| 8189 | 2187 scale = gdk_pixbuf_scale_simple(buf, |
| 9318 | 2188 MAX(gdk_pixbuf_get_width(buf) * scale_width / |
| 8189 | 2189 gdk_pixbuf_animation_get_width(gtkconv->u.im->anim), 1), |
| 9318 | 2190 MAX(gdk_pixbuf_get_height(buf) * scale_height / |
| 8189 | 2191 gdk_pixbuf_animation_get_height(gtkconv->u.im->anim), 1), |
| 11324 | 2192 GDK_INTERP_BILINEAR); |
| 8189 | 2193 |
| 2194 gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); | |
| 2195 g_object_unref(G_OBJECT(scale)); | |
| 2196 gtk_image_set_from_pixmap(GTK_IMAGE(gtkconv->u.im->icon), pm, bm); | |
| 2197 g_object_unref(G_OBJECT(pm)); | |
| 2198 gtk_widget_queue_draw(gtkconv->u.im->icon); | |
| 2199 | |
| 2200 if (bm) | |
| 2201 g_object_unref(G_OBJECT(bm)); | |
| 2202 | |
| 9131 | 2203 delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter); |
| 10639 | 2204 |
| 2205 if (delay < 100) | |
| 9131 | 2206 delay = 100; |
| 2207 | |
|
11799
a3c28707ef4d
[gaim-migrate @ 14090]
Gary Kramlich <grim@reaperworld.com>
parents:
11787
diff
changeset
|
2208 gtkconv->u.im->icon_timer = g_timeout_add(delay, redraw_icon, gtkconv); |
| 8189 | 2209 |
| 2210 return FALSE; | |
| 2211 } | |
| 2212 | |
| 2213 static void | |
| 10810 | 2214 start_anim(GtkObject *obj, GaimGtkConversation *gtkconv) |
| 8189 | 2215 { |
| 2216 int delay; | |
| 2217 | |
| 8228 | 2218 if (gtkconv->u.im->anim == NULL) |
| 2219 return; | |
| 2220 | |
| 8202 | 2221 if (gtkconv->u.im->icon_timer != 0) |
| 2222 return; | |
| 2223 | |
| 8189 | 2224 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) |
| 2225 return; | |
| 2226 | |
| 10639 | 2227 delay = gdk_pixbuf_animation_iter_get_delay_time(gtkconv->u.im->iter); |
| 2228 | |
| 2229 if (delay < 100) | |
| 2230 delay = 100; | |
| 2231 | |
|
11799
a3c28707ef4d
[gaim-migrate @ 14090]
Gary Kramlich <grim@reaperworld.com>
parents:
11787
diff
changeset
|
2232 gtkconv->u.im->icon_timer = g_timeout_add(delay, redraw_icon, gtkconv); |
| 8189 | 2233 } |
| 2234 | |
| 2235 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2236 remove_icon(GaimGtkConversation *gtkconv) |
| 8189 | 2237 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2238 GaimConversation *conv = gtkconv->active_conv; |
| 10456 | 2239 GaimGtkWindow *gtkwin; |
| 2240 | |
| 2241 g_return_if_fail(conv != NULL); | |
| 2242 | |
| 9887 | 2243 if (gtkconv->u.im->icon_container != NULL) |
| 2244 gtk_widget_destroy(gtkconv->u.im->icon_container); | |
| 8189 | 2245 |
| 2246 if (gtkconv->u.im->anim != NULL) | |
| 2247 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); | |
| 2248 | |
| 2249 if (gtkconv->u.im->icon_timer != 0) | |
| 2250 g_source_remove(gtkconv->u.im->icon_timer); | |
| 2251 | |
| 2252 if (gtkconv->u.im->iter != NULL) | |
| 2253 g_object_unref(G_OBJECT(gtkconv->u.im->iter)); | |
| 2254 | |
| 2255 gtkconv->u.im->icon_timer = 0; | |
| 2256 gtkconv->u.im->icon = NULL; | |
| 2257 gtkconv->u.im->anim = NULL; | |
| 2258 gtkconv->u.im->iter = NULL; | |
| 10456 | 2259 gtkconv->u.im->icon_container = NULL; |
| 9687 | 2260 gtkconv->u.im->show_icon = FALSE; |
| 10456 | 2261 |
| 11581 | 2262 gtkwin = gtkconv->win; |
| 10456 | 2263 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkwin->menu.show_icon), FALSE); |
| 8189 | 2264 } |
| 2265 | |
| 9497 | 2266 static void |
| 9504 | 2267 saveicon_writefile_cb(void *user_data, const char *filename) |
| 9497 | 2268 { |
| 10810 | 2269 GaimGtkConversation *gtkconv = (GaimGtkConversation *)user_data; |
| 2270 GaimConversation *conv = gtkconv->active_conv; | |
| 9497 | 2271 FILE *fp; |
| 2272 GaimBuddyIcon *icon; | |
| 2273 const void *data; | |
| 2274 size_t len; | |
| 2275 | |
|
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10572
diff
changeset
|
2276 if ((fp = g_fopen(filename, "wb")) == NULL) { |
| 9504 | 2277 gaim_notify_error(conv, NULL, _("Unable to open file."), NULL); |
| 9497 | 2278 return; |
| 2279 } | |
| 2280 | |
| 2281 icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); | |
| 2282 data = gaim_buddy_icon_get_data(icon, &len); | |
| 2283 | |
| 2284 if ((len <= 0) || (data == NULL)) { | |
| 9504 | 2285 gaim_notify_error(conv, NULL, _("Unable to save icon file to disk."), NULL); |
| 9497 | 2286 return; |
| 2287 } | |
| 2288 | |
| 2289 fwrite(data, 1, len, fp); | |
| 2290 fclose(fp); | |
| 2291 } | |
| 2292 | |
| 2293 static void | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2294 icon_menu_save_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) |
| 9497 | 2295 { |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2296 GaimConversation *conv = gtkconv->active_conv; |
| 10953 | 2297 const gchar *ext; |
| 9497 | 2298 gchar *buf; |
| 2299 | |
| 2300 g_return_if_fail(conv != NULL); | |
| 9504 | 2301 |
| 10953 | 2302 ext = gaim_buddy_icon_get_type(gaim_conv_im_get_icon(GAIM_CONV_IM(conv))); |
| 2303 if (ext == NULL) | |
| 2304 ext = "icon"; | |
| 2305 | |
| 2306 buf = g_strdup_printf("%s.%s", gaim_normalize(conv->account, conv->name), ext); | |
| 9504 | 2307 |
| 2308 gaim_request_file(conv, _("Save Icon"), buf, TRUE, | |
|
11799
a3c28707ef4d
[gaim-migrate @ 14090]
Gary Kramlich <grim@reaperworld.com>
parents:
11787
diff
changeset
|
2309 G_CALLBACK(saveicon_writefile_cb), NULL, gtkconv); |
| 9497 | 2310 |
| 2311 g_free(buf); | |
| 2312 } | |
| 2313 | |
| 11581 | 2314 static void |
| 2315 stop_anim(GtkObject *obj, GaimGtkConversation *gtkconv) | |
| 2316 { | |
| 2317 if (gtkconv->u.im->icon_timer != 0) | |
| 2318 g_source_remove(gtkconv->u.im->icon_timer); | |
| 2319 | |
| 2320 gtkconv->u.im->icon_timer = 0; | |
| 2321 } | |
| 2322 | |
| 2323 | |
| 2324 static void | |
| 2325 toggle_icon_animate_cb(GtkWidget *w, GaimGtkConversation *gtkconv) | |
| 2326 { | |
| 2327 gtkconv->u.im->animate = | |
| 2328 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w)); | |
| 2329 | |
| 2330 if (gtkconv->u.im->animate) | |
| 2331 start_anim(NULL, gtkconv); | |
| 2332 else | |
| 2333 stop_anim(NULL, gtkconv); | |
| 2334 } | |
| 2335 | |
| 8189 | 2336 static gboolean |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2337 icon_menu(GtkObject *obj, GdkEventButton *e, GaimGtkConversation *gtkconv) |
| 8189 | 2338 { |
| 2339 static GtkWidget *menu = NULL; | |
| 2340 GtkWidget *button; | |
| 2341 | |
| 2342 if (e->button != 3 || e->type != GDK_BUTTON_PRESS) | |
| 2343 return FALSE; | |
| 2344 | |
| 2345 /* | |
| 2346 * If a menu already exists, destroy it before creating a new one, | |
| 2347 * thus freeing-up the memory it occupied. | |
| 2348 */ | |
| 2349 if (menu != NULL) | |
| 2350 gtk_widget_destroy(menu); | |
| 2351 | |
| 2352 menu = gtk_menu_new(); | |
| 2353 | |
| 2354 if (gtkconv->u.im->anim && | |
| 2355 !(gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim))) | |
| 2356 { | |
| 2357 gaim_new_check_item(menu, _("Animate"), | |
|
11799
a3c28707ef4d
[gaim-migrate @ 14090]
Gary Kramlich <grim@reaperworld.com>
parents:
11787
diff
changeset
|
2358 G_CALLBACK(toggle_icon_animate_cb), gtkconv, |
| 8189 | 2359 gtkconv->u.im->icon_timer); |
| 2360 } | |
| 2361 | |
| 2362 button = gtk_menu_item_new_with_label(_("Hide Icon")); | |
| 2363 g_signal_connect_swapped(G_OBJECT(button), "activate", | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2364 G_CALLBACK(remove_icon), gtkconv); |
| 8189 | 2365 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); |
| 2366 gtk_widget_show(button); | |
| 2367 | |
| 2368 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
|
2369 G_CALLBACK(icon_menu_save_cb), gtkconv, |
| 8189 | 2370 0, 0, NULL); |
| 2371 | |
| 2372 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, e->button, e->time); | |
| 2373 | |
| 2374 return TRUE; | |
| 2375 } | |
| 10456 | 2376 |
| 2377 static void | |
| 2378 menu_buddyicon_cb(gpointer data, guint action, GtkWidget *widget) | |
| 2379 { | |
| 11581 | 2380 GaimGtkWindow *win = data; |
| 10456 | 2381 GaimConversation *conv; |
| 2382 GaimGtkConversation *gtkconv; | |
| 2383 gboolean active; | |
| 2384 | |
| 11581 | 2385 conv = gaim_gtk_conv_window_get_active_conversation(win); |
| 10456 | 2386 |
| 2387 if (!conv) | |
| 2388 return; | |
| 2389 | |
| 11338 | 2390 g_return_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM); |
| 10456 | 2391 |
| 2392 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 2393 | |
| 2394 active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); | |
| 2395 gtkconv->u.im->show_icon = active; | |
| 2396 if (active) | |
| 2397 gaim_gtkconv_update_buddy_icon(conv); | |
| 2398 else | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
2399 remove_icon(gtkconv); |
| 10456 | 2400 } |
| 2401 | |
| 8189 | 2402 /************************************************************************** |
| 2403 * End of the bunch of buddy icon functions | |
| 2404 **************************************************************************/ | |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2405 void |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2406 gaim_gtkconv_present_conversation(GaimConversation *conv) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2407 { |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2408 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2409 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2410 if(gtkconv->win==hidden_convwin) { |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
2411 gaim_gtk_conv_window_remove_gtkconv(hidden_convwin, gtkconv); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2412 gaim_gtkconv_placement_place(gtkconv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2413 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2414 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2415 gaim_gtkconv_set_active_conversation(conv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2416 gaim_gtk_conv_window_switch_gtkconv(gtkconv->win, gtkconv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2417 gaim_gtk_conv_window_raise(gtkconv->win); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2418 gtk_window_present(GTK_WINDOW(gtkconv->win->window)); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2419 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
2420 |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2421 GList * |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2422 gaim_gtk_conversations_find_unseen_list(GaimConversationType type, |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2423 GaimUnseenState min_state, |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2424 gboolean hidden_only, |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2425 guint max_count) |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2426 { |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2427 GList *l; |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2428 GList *r = NULL; |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2429 guint c = 0; |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2430 |
|
12469
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2431 if (type == GAIM_CONV_TYPE_IM) { |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2432 l = gaim_get_ims(); |
|
12469
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2433 } else if (type == GAIM_CONV_TYPE_CHAT) { |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2434 l = gaim_get_chats(); |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2435 } else { |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2436 l = gaim_get_conversations(); |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2437 } |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2438 |
|
12469
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2439 for (; l != NULL && (max_count == 0 || c < max_count); l = l->next) { |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2440 GaimConversation *conv = (GaimConversation*)l->data; |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2441 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2442 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2443 if(gtkconv->active_conv != conv) |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2444 continue; |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2445 |
|
12469
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2446 if (gtkconv->unseen_state >= min_state |
|
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2447 && (!hidden_only || |
|
f4efe0c0de88
[gaim-migrate @ 14779]
Richard Laager <rlaager@wiktel.com>
parents:
12468
diff
changeset
|
2448 (hidden_only && gtkconv->win == hidden_convwin))) { |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2449 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2450 r = g_list_prepend(r, conv); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2451 c++; |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2452 } |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2453 } |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2454 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2455 return r; |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
2456 } |
| 8189 | 2457 |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2458 static void |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2459 unseen_conv_menu_cb(GtkMenuItem *item, GaimConversation *conv) |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2460 { |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2461 g_return_if_fail(conv != NULL); |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2462 gaim_gtkconv_present_conversation(conv); |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2463 } |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2464 |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2465 guint |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2466 gaim_gtk_conversations_fill_menu(GtkWidget *menu, GList *convs) |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2467 { |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2468 GList *l; |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2469 guint ret=0; |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2470 |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2471 g_return_val_if_fail(menu != NULL, 0); |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2472 g_return_val_if_fail(convs != NULL, 0); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2473 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2474 for (l = convs; l != NULL ; l = l->next) { |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2475 GaimConversation *conv = (GaimConversation*)l->data; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2476 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2477 |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2478 GtkWidget *icon = gtk_image_new(); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2479 GdkPixbuf *pbuf = gaim_gtkconv_get_tab_icon(conv, TRUE); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2480 GtkWidget *item; |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2481 gchar *text = g_strdup_printf("%s (%d)", |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2482 gtk_label_get_text(GTK_LABEL(gtkconv->tab_label)), |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2483 gtkconv->unseen_count); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2484 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2485 gtk_image_set_from_pixbuf(GTK_IMAGE(icon), pbuf); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2486 g_object_unref(pbuf); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2487 |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2488 item = gtk_image_menu_item_new_with_label(text); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2489 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), icon); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2490 g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(unseen_conv_menu_cb), conv); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2491 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2492 g_free(text); |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
2493 ret++; |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2494 } |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2495 |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2496 return ret; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2497 } |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
2498 |
| 11581 | 2499 GaimGtkWindow * |
| 2500 gaim_gtkconv_get_window(GaimGtkConversation *gtkconv) | |
| 2501 { | |
| 2502 g_return_val_if_fail(gtkconv != NULL, NULL); | |
| 2503 return gtkconv->win; | |
| 2504 } | |
| 2505 | |
| 2506 static GtkItemFactoryEntry menu_items[] = | |
| 2507 { | |
| 2508 /* Conversation menu */ | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2509 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>", NULL }, |
| 11581 | 2510 |
| 2511 { N_("/Conversation/New Instant _Message..."), "<CTL>M", menu_new_conv_cb, | |
| 2512 0, "<StockItem>", GAIM_STOCK_IM }, | |
| 2513 | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2514 { "/Conversation/sep0", NULL, NULL, 0, "<Separator>", NULL }, |
| 11581 | 2515 |
| 2516 { N_("/Conversation/_Find..."), NULL, menu_find_cb, 0, | |
| 2517 "<StockItem>", GTK_STOCK_FIND }, | |
|
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12190
diff
changeset
|
2518 { N_("/Conversation/View _Log"), NULL, menu_view_log_cb, 0, "<StockItem>", GAIM_STOCK_LOG }, |
| 11581 | 2519 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, |
| 2520 "<StockItem>", GTK_STOCK_SAVE_AS }, | |
| 12240 | 2521 { N_("/Conversation/Clea_r"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, |
| 11581 | 2522 |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2523 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>", NULL }, |
| 11581 | 2524 |
| 2525 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", GAIM_STOCK_FILE_TRANSFER }, | |
| 2526 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, | |
|
12191
bc2b9f925979
[gaim-migrate @ 14493]
Richard Laager <rlaager@wiktel.com>
parents:
12190
diff
changeset
|
2527 0, "<StockItem>", GAIM_STOCK_POUNCE }, |
| 11581 | 2528 { N_("/Conversation/_Get Info"), "<CTL>O", menu_get_info_cb, 0, |
| 2529 "<StockItem>", GAIM_STOCK_INFO }, | |
| 2530 { N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0, | |
| 2531 "<StockItem>", GAIM_STOCK_INVITE }, | |
| 2532 | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2533 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>", NULL }, |
| 11581 | 2534 |
| 2535 { N_("/Conversation/Al_ias..."), NULL, menu_alias_cb, 0, | |
| 2536 "<StockItem>", GAIM_STOCK_EDIT }, | |
| 2537 { N_("/Conversation/_Block..."), NULL, menu_block_cb, 0, | |
| 2538 "<StockItem>", GAIM_STOCK_BLOCK }, | |
| 2539 { N_("/Conversation/_Add..."), NULL, menu_add_remove_cb, 0, | |
| 2540 "<StockItem>", GTK_STOCK_ADD }, | |
| 2541 { N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0, | |
| 2542 "<StockItem>", GTK_STOCK_REMOVE }, | |
| 2543 | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2544 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>", NULL }, |
| 11581 | 2545 |
| 2546 { N_("/Conversation/Insert Lin_k..."), NULL, menu_insert_link_cb, 0, | |
| 2547 "<StockItem>", GAIM_STOCK_LINK }, | |
| 2548 { N_("/Conversation/Insert Imag_e..."), NULL, menu_insert_image_cb, 0, | |
| 2549 "<StockItem>", GAIM_STOCK_IMAGE }, | |
| 2550 | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2551 { "/Conversation/sep4", NULL, NULL, 0, "<Separator>", NULL }, |
| 11581 | 2552 |
| 2553 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0, | |
| 2554 "<StockItem>", GTK_STOCK_CLOSE }, | |
| 2555 | |
| 2556 /* Options */ | |
|
12600
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2557 { N_("/_Options"), NULL, NULL, 0, "<Branch>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2558 { N_("/Options/Enable _Logging"), NULL, menu_logging_cb, 0, "<CheckItem>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2559 { N_("/Options/Enable _Sounds"), NULL, menu_sounds_cb, 0, "<CheckItem>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2560 { N_("/Options/Show Buddy _Icon"), NULL, menu_buddyicon_cb, 0, "<CheckItem>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2561 { "/Options/sep0", NULL, NULL, 0, "<Separator>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2562 { N_("/Options/Show Formatting _Toolbars"), NULL, menu_toolbar_cb, 0, "<CheckItem>", NULL }, |
|
e856f985a0b9
[gaim-migrate @ 14934]
Richard Laager <rlaager@wiktel.com>
parents:
12594
diff
changeset
|
2563 { N_("/Options/Show Ti_mestamps"), "F2", menu_timestamps_cb, 0, "<CheckItem>", NULL }, |
| 11581 | 2564 }; |
| 2565 | |
| 2566 static const int menu_item_count = | |
| 2567 sizeof(menu_items) / sizeof(*menu_items); | |
| 2568 | |
| 2569 static char * | |
| 2570 item_factory_translate_func (const char *path, gpointer func_data) | |
| 2571 { | |
| 2572 return _((char *)path); | |
| 2573 } | |
| 2574 | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2575 static void |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2576 sound_method_pref_changed_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2577 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2578 GaimGtkWindow *win = data; |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2579 const char *method = value; |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2580 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2581 if (!strcmp(method, "none")) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2582 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2583 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2584 FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2585 gtk_widget_set_sensitive(win->menu.sounds, FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2586 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2587 else |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2588 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2589 GaimGtkConversation *gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2590 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2591 if (gtkconv != NULL) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2592 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2593 TRUE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2594 gtk_widget_set_sensitive(win->menu.sounds, TRUE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2595 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2596 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2597 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2598 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2599 static void |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2600 show_buddy_icons_pref_changed_cb(const char *name, GaimPrefType type, gpointer value, gpointer data) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2601 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2602 GaimGtkWindow *win = data; |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2603 gboolean show_icons = GPOINTER_TO_INT(value); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2604 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2605 if (!show_icons) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2606 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2607 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2608 FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2609 gtk_widget_set_sensitive(win->menu.show_icon, FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2610 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2611 else |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2612 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2613 GaimGtkConversation *gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2614 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2615 if (gtkconv != NULL) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2616 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2617 TRUE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2618 gtk_widget_set_sensitive(win->menu.show_icon, TRUE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2619 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2620 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2621 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2622 |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2623 |
| 11581 | 2624 static GtkWidget * |
| 2625 setup_menubar(GaimGtkWindow *win) | |
| 2626 { | |
| 2627 GtkAccelGroup *accel_group; | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2628 const char *method; |
| 11581 | 2629 |
| 2630 accel_group = gtk_accel_group_new (); | |
| 2631 gtk_window_add_accel_group(GTK_WINDOW(win->window), accel_group); | |
| 2632 g_object_unref(accel_group); | |
| 2633 | |
| 2634 win->menu.item_factory = | |
| 2635 gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group); | |
| 2636 | |
| 2637 gtk_item_factory_set_translate_func(win->menu.item_factory, | |
| 2638 item_factory_translate_func, | |
| 2639 NULL, NULL); | |
| 2640 | |
| 2641 gtk_item_factory_create_items(win->menu.item_factory, menu_item_count, | |
| 2642 menu_items, win); | |
| 2643 g_signal_connect(G_OBJECT(accel_group), "accel-changed", | |
| 2644 G_CALLBACK(gaim_gtk_save_accels_cb), NULL); | |
| 2645 | |
| 2646 | |
| 2647 win->menu.menubar = | |
| 2648 gtk_item_factory_get_widget(win->menu.item_factory, "<main>"); | |
| 2649 | |
| 2650 | |
| 2651 win->menu.view_log = | |
| 2652 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2653 N_("/Conversation/View Log")); | |
| 2654 | |
| 2655 /* --- */ | |
| 2656 | |
| 2657 win->menu.send_file = | |
| 2658 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2659 N_("/Conversation/Send File...")); | |
| 2660 | |
| 2661 win->menu.add_pounce = | |
| 2662 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2663 N_("/Conversation/Add Buddy Pounce...")); | |
| 2664 | |
| 2665 /* --- */ | |
| 2666 | |
| 2667 win->menu.get_info = | |
| 2668 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2669 N_("/Conversation/Get Info")); | |
| 2670 | |
| 2671 win->menu.invite = | |
| 2672 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2673 N_("/Conversation/Invite...")); | |
| 2674 | |
| 2675 /* --- */ | |
| 2676 | |
| 2677 win->menu.alias = | |
| 2678 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2679 N_("/Conversation/Alias...")); | |
| 2680 | |
| 2681 win->menu.block = | |
| 2682 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2683 N_("/Conversation/Block...")); | |
| 2684 | |
| 2685 win->menu.add = | |
| 2686 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2687 N_("/Conversation/Add...")); | |
| 2688 | |
| 2689 win->menu.remove = | |
| 2690 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2691 N_("/Conversation/Remove...")); | |
| 2692 | |
| 2693 /* --- */ | |
| 2694 | |
| 2695 win->menu.insert_link = | |
| 2696 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2697 N_("/Conversation/Insert Link...")); | |
| 2698 | |
| 2699 win->menu.insert_image = | |
| 2700 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2701 N_("/Conversation/Insert Image...")); | |
| 2702 | |
| 2703 /* --- */ | |
| 2704 | |
| 2705 win->menu.logging = | |
| 2706 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2707 N_("/Options/Enable Logging")); | |
| 2708 win->menu.sounds = | |
| 2709 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2710 N_("/Options/Enable Sounds")); | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2711 method = gaim_prefs_get_string("/gaim/gtk/sound/method"); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2712 if (!strcmp(method, "none")) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2713 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2714 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2715 FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2716 gtk_widget_set_sensitive(win->menu.sounds, FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2717 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2718 gaim_prefs_connect_callback(win, "/gaim/gtk/sound/method", |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2719 sound_method_pref_changed_cb, win); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2720 |
| 11581 | 2721 win->menu.show_formatting_toolbar = |
| 2722 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2723 N_("/Options/Show Formatting Toolbars")); | |
| 2724 win->menu.show_timestamps = | |
| 2725 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2726 N_("/Options/Show Timestamps")); | |
| 2727 win->menu.show_icon = | |
| 2728 gtk_item_factory_get_widget(win->menu.item_factory, | |
| 2729 N_("/Options/Show Buddy Icon")); | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2730 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2731 { |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2732 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2733 FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2734 gtk_widget_set_sensitive(win->menu.show_icon, FALSE); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2735 } |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2736 gaim_prefs_connect_callback(win, "/gaim/gtk/conversations/im/show_buddy_icons", |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
2737 show_buddy_icons_pref_changed_cb, win); |
| 11581 | 2738 |
| 2739 win->menu.tray = gaim_gtk_menu_tray_new(); | |
| 2740 gtk_menu_shell_append(GTK_MENU_SHELL(win->menu.menubar), | |
| 2741 win->menu.tray); | |
| 2742 gtk_widget_show(win->menu.tray); | |
| 2743 | |
| 2744 gtk_widget_show(win->menu.menubar); | |
| 2745 | |
| 2746 return win->menu.menubar; | |
| 2747 } | |
| 2748 | |
| 4359 | 2749 |
| 2750 /************************************************************************** | |
| 2751 * Utility functions | |
| 2752 **************************************************************************/ | |
| 2753 | |
| 2754 static void | |
| 10810 | 2755 got_typing_keypress(GaimGtkConversation *gtkconv, gboolean first) |
| 4359 | 2756 { |
| 10810 | 2757 GaimConversation *conv = gtkconv->active_conv; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2758 GaimConvIm *im; |
| 4685 | 2759 |
| 4359 | 2760 /* |
| 2761 * 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
|
2762 * send GAIM_TYPED any time soon. |
| 4359 | 2763 */ |
| 2764 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2765 im = GAIM_CONV_IM(conv); |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2766 |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2767 if (gaim_conv_im_get_type_again_timeout(im)) |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2768 gaim_conv_im_stop_type_again_timeout(im); |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2769 |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2770 gaim_conv_im_start_type_again_timeout(im); |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2771 |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2772 if (first || (gaim_conv_im_get_type_again(im) != 0 && |
|
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2773 time(NULL) > gaim_conv_im_get_type_again(im))) { |
| 4359 | 2774 |
| 2775 int timeout = serv_send_typing(gaim_conversation_get_gc(conv), | |
| 2776 (char *)gaim_conversation_get_name(conv), | |
|
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5860
diff
changeset
|
2777 GAIM_TYPING); |
| 4359 | 2778 |
| 2779 if (timeout) | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2780 gaim_conv_im_set_type_again(im, time(NULL) + timeout); |
| 4359 | 2781 else |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2782 gaim_conv_im_set_type_again(im, 0); |
| 4359 | 2783 } |
| 2784 } | |
| 2785 | |
| 4736 | 2786 static void |
| 10810 | 2787 update_typing_icon(GaimGtkConversation *gtkconv) |
| 4736 | 2788 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2789 GaimGtkWindow *gtkwin; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2790 GaimConvIm *im = NULL; |
| 10810 | 2791 GaimConversation *conv = gtkconv->active_conv; |
| 12008 | 2792 char *stock_id, *tooltip; |
| 11508 | 2793 |
| 11581 | 2794 gtkwin = gtkconv->win; |
| 4736 | 2795 |
| 12008 | 2796 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
2797 im = GAIM_CONV_IM(conv); |
| 4736 | 2798 |
| 12008 | 2799 if (gtkwin->menu.typing_icon) { |
| 2800 gtk_widget_hide(gtkwin->menu.typing_icon); | |
|
11787
c9188d3eb9d3
[gaim-migrate @ 14078]
Gary Kramlich <grim@reaperworld.com>
parents:
11780
diff
changeset
|
2801 } |
|
c9188d3eb9d3
[gaim-migrate @ 14078]
Gary Kramlich <grim@reaperworld.com>
parents:
11780
diff
changeset
|
2802 |
| 12008 | 2803 if (!im || (gaim_conv_im_get_typing_state(im) == GAIM_NOT_TYPING)) |
| 2804 return; | |
| 2805 | |
| 2806 if (gaim_conv_im_get_typing_state(im) == GAIM_TYPING) { | |
| 2807 stock_id = GAIM_STOCK_TYPING; | |
| 2808 tooltip = _("User is typing..."); | |
| 2809 } else { | |
| 2810 stock_id = GAIM_STOCK_TYPED; | |
| 2811 tooltip = _("User has typed something and stopped"); | |
|
11787
c9188d3eb9d3
[gaim-migrate @ 14078]
Gary Kramlich <grim@reaperworld.com>
parents:
11780
diff
changeset
|
2812 } |
| 12008 | 2813 |
| 2814 if (gtkwin->menu.typing_icon == NULL) | |
| 2815 { | |
| 2816 gtkwin->menu.typing_icon = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU); | |
|
11787
c9188d3eb9d3
[gaim-migrate @ 14078]
Gary Kramlich <grim@reaperworld.com>
parents:
11780
diff
changeset
|
2817 gaim_gtk_menu_tray_append(GAIM_GTK_MENU_TRAY(gtkwin->menu.tray), |
|
11908
34ea75bdd0c9
[gaim-migrate @ 14199]
Richard Laager <rlaager@wiktel.com>
parents:
11869
diff
changeset
|
2818 gtkwin->menu.typing_icon, |
| 12008 | 2819 tooltip); |
| 4736 | 2820 } |
| 12008 | 2821 else |
| 2822 { | |
| 2823 gtk_image_set_from_stock(GTK_IMAGE(gtkwin->menu.typing_icon), stock_id, GTK_ICON_SIZE_MENU); | |
| 2824 gaim_gtk_menu_tray_set_tooltip(GAIM_GTK_MENU_TRAY(gtkwin->menu.tray), | |
| 2825 gtkwin->menu.typing_icon, | |
| 2826 tooltip); | |
| 2827 } | |
| 2828 | |
| 2829 gtk_widget_show(gtkwin->menu.typing_icon); | |
| 4736 | 2830 } |
| 2831 | |
| 4685 | 2832 static gboolean |
| 11594 | 2833 update_send_to_selection(GaimGtkWindow *win) |
| 4359 | 2834 { |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
2835 GaimAccount *account; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
2836 GaimConversation *conv; |
| 4359 | 2837 GtkWidget *menu; |
| 2838 GList *child; | |
| 11594 | 2839 GaimBuddy *b; |
| 11581 | 2840 |
| 2841 conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 4359 | 2842 |
|
5860
52d5fad43950
[gaim-migrate @ 6291]
Christian Hammond <chipx86@chipx86.com>
parents:
5858
diff
changeset
|
2843 if (conv == NULL) |
|
52d5fad43950
[gaim-migrate @ 6291]
Christian Hammond <chipx86@chipx86.com>
parents:
5858
diff
changeset
|
2844 return FALSE; |
|
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
2845 |
|
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
2846 account = gaim_conversation_get_account(conv); |
| 11581 | 2847 |
| 11594 | 2848 if (win->menu.send_to == NULL) |
| 4685 | 2849 return FALSE; |
|
4364
fa56829b9587
[gaim-migrate @ 4630]
Christian Hammond <chipx86@chipx86.com>
parents:
4363
diff
changeset
|
2850 |
| 11594 | 2851 if (!(b = gaim_find_buddy(account, conv->name))) |
| 2852 return FALSE; | |
| 2853 | |
| 2854 | |
| 2855 gtk_widget_show(win->menu.send_to); | |
| 4359 | 2856 |
| 2857 menu = gtk_menu_item_get_submenu( | |
| 11594 | 2858 GTK_MENU_ITEM(win->menu.send_to)); |
| 4359 | 2859 |
| 2860 for (child = gtk_container_get_children(GTK_CONTAINER(menu)); | |
| 2861 child != NULL; | |
| 2862 child = child->next) { | |
| 2863 | |
| 2864 GtkWidget *item = child->data; | |
| 11594 | 2865 GaimBuddy *item_buddy; |
| 2866 GaimAccount *item_account = g_object_get_data(G_OBJECT(item), "gaim_account"); | |
| 2867 gchar *buddy_name = g_object_get_data(G_OBJECT(item), | |
| 2868 "gaim_buddy_name"); | |
| 2869 item_buddy = gaim_find_buddy(item_account, buddy_name); | |
| 2870 | |
| 2871 if (b == item_buddy) { | |
| 4359 | 2872 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), TRUE); |
| 2873 break; | |
| 2874 } | |
| 2875 } | |
|
6030
54c37db13279
[gaim-migrate @ 6480]
Christian Hammond <chipx86@chipx86.com>
parents:
6016
diff
changeset
|
2876 |
| 4685 | 2877 return FALSE; |
| 4359 | 2878 } |
| 2879 | |
|
12645
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2880 static gboolean |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2881 send_to_item_enter_notify_cb(GtkWidget *menuitem, GdkEventCrossing *event, GtkWidget *label) |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2882 { |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2883 gtk_widget_set_sensitive(GTK_WIDGET(label), TRUE); |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2884 return FALSE; |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2885 } |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2886 |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2887 static gboolean |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2888 send_to_item_leave_notify_cb(GtkWidget *menuitem, GdkEventCrossing *event, GtkWidget *label) |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2889 { |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2890 gtk_widget_set_sensitive(GTK_WIDGET(label), FALSE); |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2891 return FALSE; |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2892 } |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2893 |
| 4359 | 2894 static void |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2895 create_sendto_item(GtkWidget *menu, GtkSizeGroup *sg, GSList **group, GaimBuddy *buddy, GaimAccount *account, const char *name) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2896 { |
| 11594 | 2897 GtkWidget *box; |
| 2898 GtkWidget *label; | |
| 2899 GtkWidget *image; | |
| 2900 GtkWidget *menuitem; | |
| 11625 | 2901 GdkPixbuf *pixbuf; |
| 11616 | 2902 gchar *text; |
| 11594 | 2903 |
| 2904 /* Create a pixmap for the protocol icon. */ | |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2905 if (buddy != NULL) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2906 pixbuf = gaim_gtk_blist_get_status_icon((GaimBlistNode*)buddy, GAIM_STATUS_ICON_SMALL); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2907 else |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2908 { |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2909 GdkPixbuf *unscaled = gaim_gtk_create_prpl_icon(account); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2910 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2911 /* XXX: 15 is the size for GAIM_STATUS_ICON_SMALL in gtkblist.c */ |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2912 pixbuf = gdk_pixbuf_scale_simple(unscaled, 15, 15, |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2913 GDK_INTERP_BILINEAR); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2914 g_object_unref(G_OBJECT(unscaled)); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2915 } |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2916 |
| 11594 | 2917 /* Now convert it to GtkImage */ |
| 2918 if (pixbuf == NULL) | |
| 2919 image = gtk_image_new(); | |
| 2920 else | |
| 11625 | 2921 image = gtk_image_new_from_pixbuf(pixbuf); |
| 11594 | 2922 |
| 2923 gtk_size_group_add_widget(sg, image); | |
| 2924 | |
| 2925 g_object_unref(G_OBJECT(pixbuf)); | |
| 2926 | |
| 2927 /* Make our menu item */ | |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2928 text = g_strdup_printf("%s (%s)", name, gaim_account_get_username(account)); |
| 11616 | 2929 menuitem = gtk_radio_menu_item_new_with_label(*group, text); |
| 2930 g_free(text); | |
| 11594 | 2931 *group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(menuitem)); |
| 2932 | |
| 2933 /* Do some evil, see some evil, speak some evil. */ | |
| 2934 box = gtk_hbox_new(FALSE, 0); | |
| 2935 | |
| 2936 label = gtk_bin_get_child(GTK_BIN(menuitem)); | |
| 2937 g_object_ref(label); | |
| 2938 gtk_container_remove(GTK_CONTAINER(menuitem), label); | |
| 2939 | |
| 2940 gtk_box_pack_start(GTK_BOX(box), image, FALSE, FALSE, 0); | |
| 2941 gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 4); | |
| 2942 | |
|
12645
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2943 if (buddy != NULL && |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2944 !gaim_presence_is_online(gaim_buddy_get_presence(buddy)) && |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2945 !gaim_account_supports_offline_message(account, buddy)) |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2946 { |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2947 gtk_widget_set_sensitive(label, FALSE); |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2948 |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2949 /* Set the label sensitive when the menuitem is highlighted and |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2950 * insensitive again when the mouse leaves it. This way, it |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2951 * doesn't appear weird from the highlighting of the embossed |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2952 * (insensitive style) text.*/ |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2953 g_signal_connect(menuitem, "enter-notify-event", |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2954 G_CALLBACK(send_to_item_enter_notify_cb), label); |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2955 g_signal_connect(menuitem, "leave-notify-event", |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2956 G_CALLBACK(send_to_item_leave_notify_cb), label); |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2957 } |
|
fc28451f5d96
[gaim-migrate @ 14983]
Richard Laager <rlaager@wiktel.com>
parents:
12639
diff
changeset
|
2958 |
| 11594 | 2959 g_object_unref(label); |
| 2960 | |
| 2961 gtk_container_add(GTK_CONTAINER(menuitem), box); | |
| 2962 | |
| 2963 gtk_widget_show(label); | |
| 2964 gtk_widget_show(image); | |
| 2965 gtk_widget_show(box); | |
| 2966 | |
| 2967 /* Set our data and callbacks. */ | |
| 2968 g_object_set_data(G_OBJECT(menuitem), "gaim_account", account); | |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
2969 g_object_set_data_full(G_OBJECT(menuitem), "gaim_buddy_name", g_strdup(name), g_free); |
| 11594 | 2970 |
| 2971 g_signal_connect(G_OBJECT(menuitem), "activate", | |
| 2972 G_CALLBACK(menu_conv_sel_send_cb), NULL); | |
| 2973 | |
| 2974 gtk_widget_show(menuitem); | |
| 2975 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); | |
| 2976 } | |
| 2977 | |
| 2978 static void | |
| 2979 generate_send_to_items(GaimGtkWindow *win) | |
| 11581 | 2980 { |
| 4359 | 2981 GtkWidget *menu; |
| 2982 GSList *group = NULL; | |
|
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
2983 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); |
| 11594 | 2984 GaimGtkConversation *gtkconv; |
| 2985 GSList *l, *buds; | |
| 2986 | |
| 2987 g_return_if_fail(win != NULL); | |
| 2988 | |
| 2989 gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); | |
| 2990 | |
| 11604 | 2991 g_return_if_fail(gtkconv != NULL); |
| 2992 | |
| 11594 | 2993 if (win->menu.send_to != NULL) |
| 2994 gtk_widget_destroy(win->menu.send_to); | |
| 2995 | |
|
12286
255e6912607b
[gaim-migrate @ 14590]
Etan Reisner <pidgin@unreliablesource.net>
parents:
12272
diff
changeset
|
2996 /* Build the Send To menu */ |
| 11594 | 2997 win->menu.send_to = gtk_menu_item_new_with_mnemonic(_("_Send To")); |
| 2998 gtk_widget_show(win->menu.send_to); | |
| 4359 | 2999 |
| 3000 menu = gtk_menu_new(); | |
| 11581 | 3001 gtk_menu_shell_insert(GTK_MENU_SHELL(win->menu.menubar), |
| 11594 | 3002 win->menu.send_to, 2); |
| 3003 gtk_menu_item_set_submenu(GTK_MENU_ITEM(win->menu.send_to), menu); | |
| 4359 | 3004 |
| 3005 gtk_widget_show(menu); | |
| 3006 | |
| 11604 | 3007 if (gtkconv->active_conv->type == GAIM_CONV_TYPE_IM) { |
| 3008 buds = gaim_find_buddies(gtkconv->active_conv->account, gtkconv->active_conv->name); | |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3009 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3010 if (buds == NULL) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3011 { |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3012 /* The user isn't on the buddy list. */ |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3013 create_sendto_item(menu, sg, &group, NULL, gtkconv->active_conv->account, gtkconv->active_conv->name); |
| 11604 | 3014 } |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3015 else |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3016 { |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3017 for (l = buds; l != NULL; l = l->next) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3018 { |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3019 GaimBlistNode *node; |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3020 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3021 node = (GaimBlistNode *) gaim_buddy_get_contact((GaimBuddy *)l->data); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3022 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3023 for (node = node->child; node != NULL; node = node->next) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3024 { |
|
12639
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
3025 GaimBuddy *buddy = (GaimBuddy *)node; |
|
12638
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3026 GaimAccount *account; |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3027 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3028 if (!GAIM_BLIST_NODE_IS_BUDDY(node)) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3029 continue; |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3030 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3031 account = gaim_buddy_get_account(buddy); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3032 if (gaim_account_is_connected(account)) |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3033 create_sendto_item(menu, sg, &group, buddy, account, gaim_buddy_get_name(buddy)); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3034 } |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3035 } |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3036 |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3037 g_slist_free(buds); |
|
7a2a2ca48703
[gaim-migrate @ 14974]
Richard Laager <rlaager@wiktel.com>
parents:
12636
diff
changeset
|
3038 } |
| 4359 | 3039 } |
| 3040 | |
|
4669
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3041 g_object_unref(sg); |
|
d715736164ae
[gaim-migrate @ 4980]
Christian Hammond <chipx86@chipx86.com>
parents:
4668
diff
changeset
|
3042 |
| 11594 | 3043 gtk_widget_show(win->menu.send_to); |
| 12455 | 3044 /* TODO: This should never be insensitive. Possibly hidden or not. */ |
| 11594 | 3045 if (!group) |
| 3046 gtk_widget_set_sensitive(win->menu.send_to, FALSE); | |
| 3047 update_send_to_selection(win); | |
| 4359 | 3048 } |
| 3049 | |
| 3050 static GList * | |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3051 generate_invite_user_names(GaimConnection *gc) |
| 4359 | 3052 { |
| 6695 | 3053 GaimBlistNode *gnode,*cnode,*bnode; |
| 4359 | 3054 static GList *tmp = NULL; |
| 3055 | |
| 3056 if (tmp) | |
| 3057 g_list_free(tmp); | |
| 3058 | |
| 3059 tmp = g_list_append(NULL, ""); | |
| 3060 | |
| 3061 if (gc != NULL) { | |
| 4785 | 3062 for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
| 3063 if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
| 3064 continue; | |
| 6695 | 3065 for(cnode = gnode->child; cnode; cnode = cnode->next) { |
| 3066 if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
| 4785 | 3067 continue; |
| 6695 | 3068 for(bnode = cnode->child; bnode; bnode = bnode->next) { |
| 3069 GaimBuddy *buddy; | |
| 3070 | |
| 3071 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) | |
| 3072 continue; | |
| 3073 | |
| 3074 buddy = (GaimBuddy *)bnode; | |
| 3075 | |
| 3076 if (buddy->account == gc->account && | |
| 3077 GAIM_BUDDY_IS_ONLINE(buddy)) | |
| 10572 | 3078 tmp = g_list_insert_sorted(tmp, buddy->name, |
| 3079 (GCompareFunc)g_utf8_collate); | |
| 6695 | 3080 } |
| 4359 | 3081 } |
| 3082 } | |
| 3083 } | |
| 3084 | |
| 3085 return tmp; | |
| 3086 } | |
| 3087 | |
| 9498 | 3088 static GdkPixbuf * |
| 9554 | 3089 get_chat_buddy_status_icon(GaimConvChat *chat, const char *name, GaimConvChatBuddyFlags flags) |
| 9498 | 3090 { |
| 9554 | 3091 GdkPixbuf *pixbuf, *scale, *scale2; |
| 9498 | 3092 char *filename; |
| 10274 | 3093 const char *image = NULL; |
| 9554 | 3094 |
| 3095 if (flags & GAIM_CBFLAGS_FOUNDER) { | |
| 10274 | 3096 image = "founder.png"; |
| 9554 | 3097 } else if (flags & GAIM_CBFLAGS_OP) { |
| 10274 | 3098 image = "op.png"; |
| 9554 | 3099 } else if (flags & GAIM_CBFLAGS_HALFOP) { |
| 10274 | 3100 image = "halfop.png"; |
| 9554 | 3101 } else if (flags & GAIM_CBFLAGS_VOICE) { |
| 10274 | 3102 image = "voice.png"; |
| 9554 | 3103 } else if ((!flags) && gaim_conv_chat_is_user_ignored(chat, name)) { |
| 10274 | 3104 image = "ignored.png"; |
| 3105 } else { | |
| 3106 return NULL; | |
| 9554 | 3107 } |
| 10274 | 3108 |
| 3109 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", image, NULL); | |
| 3110 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
| 3111 g_free(filename); | |
| 3112 | |
| 3113 if (!pixbuf) | |
| 3114 return NULL; | |
| 3115 | |
| 3116 scale = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); | |
| 3117 g_object_unref(pixbuf); | |
| 3118 | |
| 3119 if (flags && gaim_conv_chat_is_user_ignored(chat, name)) { | |
| 3120 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status", "default", "ignored.png", NULL); | |
| 9498 | 3121 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); |
| 3122 g_free(filename); | |
| 10274 | 3123 scale2 = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); |
| 9498 | 3124 g_object_unref(pixbuf); |
| 10274 | 3125 gdk_pixbuf_composite(scale2, scale, 0, 0, 15, 15, 0, 0, 1, 1, GDK_INTERP_BILINEAR, 192); |
| 3126 g_object_unref(scale2); | |
| 9498 | 3127 } |
| 3128 | |
| 10274 | 3129 return scale; |
| 9498 | 3130 } |
| 3131 | |
| 4359 | 3132 static void |
| 11869 | 3133 add_chat_buddy_common(GaimConversation *conv, const char *name, GaimConvChatBuddyFlags flags, const char *alias, const char *old_name) |
| 4359 | 3134 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3135 GaimGtkConversation *gtkconv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3136 GaimGtkChatPane *gtkchat; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3137 GaimConvChat *chat; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3138 GaimConnection *gc; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3139 GaimPluginProtocolInfo *prpl_info; |
| 4359 | 3140 GtkListStore *ls; |
| 9498 | 3141 GdkPixbuf *pixbuf; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3142 GtkTreeIter iter; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3143 gboolean is_me = FALSE; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3144 gboolean is_buddy; |
| 4359 | 3145 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
3146 chat = GAIM_CONV_CHAT(conv); |
| 4359 | 3147 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 3148 gtkchat = gtkconv->u.chat; | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3149 gc = gaim_conversation_get_gc(conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3150 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3151 if (!gc || !(prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl))) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3152 return; |
| 4359 | 3153 |
| 3154 ls = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list))); | |
| 3155 | |
| 9554 | 3156 pixbuf = get_chat_buddy_status_icon(chat, name, flags); |
| 9498 | 3157 |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
3158 if (!strcmp(chat->nick, gaim_normalize(conv->account, old_name != NULL ? old_name : name))) |
|
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
3159 is_me = TRUE; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3160 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3161 is_buddy = (gaim_find_buddy(conv->account, name) != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3162 |
| 4359 | 3163 gtk_list_store_append(ls, &iter); |
|
12358
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3164 |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3165 if (is_me) |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3166 { |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3167 GdkColor send_color; |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3168 gdk_color_parse(SEND_COLOR, &send_color); |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3169 |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3170 gtk_list_store_set(ls, &iter, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3171 CHAT_USERS_ICON_COLUMN, pixbuf, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3172 CHAT_USERS_ALIAS_COLUMN, alias, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3173 CHAT_USERS_NAME_COLUMN, name, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3174 CHAT_USERS_FLAGS_COLUMN, flags, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3175 CHAT_USERS_COLOR_COLUMN, &send_color, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3176 CHAT_USERS_BUDDY_COLUMN, is_buddy, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3177 -1); |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3178 } |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3179 else |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3180 { |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3181 gtk_list_store_set(ls, &iter, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3182 CHAT_USERS_ICON_COLUMN, pixbuf, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3183 CHAT_USERS_ALIAS_COLUMN, alias, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3184 CHAT_USERS_NAME_COLUMN, name, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3185 CHAT_USERS_FLAGS_COLUMN, flags, |
|
12579
5e81ae0736c9
[gaim-migrate @ 14904]
Richard Laager <rlaager@wiktel.com>
parents:
12553
diff
changeset
|
3186 CHAT_USERS_COLOR_COLUMN, get_nick_color(gtkconv, name), |
|
12358
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3187 CHAT_USERS_BUDDY_COLUMN, is_buddy, |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3188 -1); |
|
d1af58b4a463
[gaim-migrate @ 14662]
Richard Laager <rlaager@wiktel.com>
parents:
12356
diff
changeset
|
3189 } |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3190 |
| 9554 | 3191 if (pixbuf) |
| 3192 g_object_unref(pixbuf); | |
| 4359 | 3193 } |
| 3194 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3195 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3196 tab_complete_process_item(int *most_matched, char *entered, char **partial, char *nick_partial, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3197 GList **matches, gboolean command, char *name) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3198 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3199 strncpy(nick_partial, name, strlen(entered)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3200 nick_partial[strlen(entered)] = '\0'; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3201 if (gaim_utf8_strcasecmp(nick_partial, entered)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3202 return; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3203 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3204 /* if we're here, it's a possible completion */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3205 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3206 if (*most_matched == -1) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3207 /* |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3208 * this will only get called once, since from now |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3209 * on *most_matched is >= 0 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3210 */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3211 *most_matched = strlen(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3212 *partial = g_strdup(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3213 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3214 else if (*most_matched) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3215 char *tmp = g_strdup(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3216 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3217 while (gaim_utf8_strcasecmp(tmp, *partial)) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3218 (*partial)[*most_matched] = '\0'; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3219 if (*most_matched < strlen(tmp)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3220 tmp[*most_matched] = '\0'; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3221 (*most_matched)--; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3222 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3223 (*most_matched)++; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3224 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3225 g_free(tmp); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3226 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3227 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3228 *matches = g_list_insert_sorted(*matches, g_strdup(name), |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3229 (GCompareFunc)gaim_utf8_strcasecmp); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3230 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3231 |
| 9605 | 3232 static gboolean |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3233 tab_complete(GaimConversation *conv) |
| 4359 | 3234 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3235 GaimGtkConversation *gtkconv; |
| 4359 | 3236 GtkTextIter cursor, word_start, start_buffer; |
| 3237 int start; | |
| 3238 int most_matched = -1; | |
| 3239 char *entered, *partial = NULL; | |
| 3240 char *text; | |
| 8021 | 3241 char *nick_partial; |
| 9605 | 3242 const char *prefix; |
| 4359 | 3243 GList *matches = NULL; |
| 9605 | 3244 gboolean command = FALSE; |
| 4359 | 3245 |
| 3246 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 3247 | |
| 3248 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, &start_buffer); | |
| 3249 gtk_text_buffer_get_iter_at_mark(gtkconv->entry_buffer, &cursor, | |
| 3250 gtk_text_buffer_get_insert(gtkconv->entry_buffer)); | |
| 3251 | |
| 3252 word_start = cursor; | |
| 3253 | |
| 3254 /* if there's nothing there just return */ | |
| 3255 if (!gtk_text_iter_compare(&cursor, &start_buffer)) | |
| 11338 | 3256 return (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) ? TRUE : FALSE; |
|
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
3257 |
| 4359 | 3258 text = gtk_text_buffer_get_text(gtkconv->entry_buffer, &start_buffer, |
| 3259 &cursor, FALSE); | |
| 3260 | |
| 3261 /* if we're at the end of ": " we need to move back 2 spaces */ | |
| 3262 start = strlen(text) - 1; | |
| 3263 | |
| 8021 | 3264 if (strlen(text) >= 2 && !strncmp(&text[start-1], ": ", 2)) { |
| 4359 | 3265 gtk_text_iter_backward_chars(&word_start, 2); |
| 8021 | 3266 start-=2; |
| 3267 } | |
| 4359 | 3268 |
| 3269 /* find the start of the word that we're tabbing */ | |
| 3270 while (start >= 0 && text[start] != ' ') { | |
| 3271 gtk_text_iter_backward_char(&word_start); | |
| 3272 start--; | |
| 3273 } | |
| 3274 | |
| 9605 | 3275 prefix = gaim_gtk_get_cmd_prefix(); |
| 3276 if (start == -1 && (strlen(text) >= strlen(prefix)) && !strncmp(text, prefix, strlen(prefix))) { | |
| 3277 command = TRUE; | |
| 3278 gtk_text_iter_forward_chars(&word_start, strlen(prefix)); | |
| 3279 } | |
| 3280 | |
| 4359 | 3281 g_free(text); |
| 3282 | |
| 3283 entered = gtk_text_buffer_get_text(gtkconv->entry_buffer, &word_start, | |
| 3284 &cursor, FALSE); | |
| 3285 | |
| 8021 | 3286 if (!g_utf8_strlen(entered, -1)) { |
| 4359 | 3287 g_free(entered); |
| 11338 | 3288 return (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) ? TRUE : FALSE; |
| 4359 | 3289 } |
| 3290 | |
| 8021 | 3291 nick_partial = g_malloc(strlen(entered)+1); |
| 3292 | |
| 9605 | 3293 if (command) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3294 GList *list = gaim_cmd_list(conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3295 GList *l; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3296 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3297 /* Commands */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3298 for (l = list; l != NULL; l = l->next) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3299 tab_complete_process_item(&most_matched, entered, &partial, nick_partial, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3300 &matches, TRUE, l->data); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3301 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3302 g_list_free(list); |
| 11338 | 3303 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3304 GaimConvChat *chat = GAIM_CONV_CHAT(conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3305 GList *l = gaim_conv_chat_get_users(chat); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3306 GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(GAIM_GTK_CONVERSATION(conv)->u.chat->list)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3307 GtkTreeIter iter; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3308 int f; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3309 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3310 /* Users */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3311 for (; l != NULL; l = l->next) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3312 tab_complete_process_item(&most_matched, entered, &partial, nick_partial, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3313 &matches, TRUE, ((GaimConvChatBuddy *)l->data)->name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3314 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3315 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3316 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3317 /* Aliases */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3318 if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3319 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3320 do { |
|
11460
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3321 char *name; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3322 char *alias; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3323 |
|
11460
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3324 gtk_tree_model_get(model, &iter, |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3325 CHAT_USERS_NAME_COLUMN, &name, |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3326 CHAT_USERS_ALIAS_COLUMN, &alias, |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3327 -1); |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3328 |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3329 if (strcmp(name, alias)) |
|
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3330 tab_complete_process_item(&most_matched, entered, &partial, nick_partial, |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3331 &matches, FALSE, alias); |
|
11460
d68ca756e983
[gaim-migrate @ 13699]
Richard Laager <rlaager@wiktel.com>
parents:
11454
diff
changeset
|
3332 g_free(name); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3333 g_free(alias); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3334 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3335 f = gtk_tree_model_iter_next(model, &iter); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3336 } while (f != 0); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3337 } |
| 9605 | 3338 } else { |
| 3339 g_free(nick_partial); | |
| 3340 g_free(entered); | |
| 3341 return FALSE; | |
| 3342 } | |
| 3343 | |
| 8021 | 3344 g_free(nick_partial); |
| 3345 | |
| 4359 | 3346 /* we're only here if we're doing new style */ |
| 3347 | |
| 3348 /* if there weren't any matches, return */ | |
| 3349 if (!matches) { | |
| 3350 /* if matches isn't set partials won't be either */ | |
| 3351 g_free(entered); | |
| 11338 | 3352 return (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) ? TRUE : FALSE; |
| 4359 | 3353 } |
| 3354 | |
| 3355 gtk_text_buffer_delete(gtkconv->entry_buffer, &word_start, &cursor); | |
| 3356 | |
| 3357 if (!matches->next) { | |
| 3358 /* there was only one match. fill it in. */ | |
| 3359 gtk_text_buffer_get_start_iter(gtkconv->entry_buffer, &start_buffer); | |
| 3360 gtk_text_buffer_get_iter_at_mark(gtkconv->entry_buffer, &cursor, | |
| 3361 gtk_text_buffer_get_insert(gtkconv->entry_buffer)); | |
| 3362 | |
| 3363 if (!gtk_text_iter_compare(&cursor, &start_buffer)) { | |
| 3364 char *tmp = g_strdup_printf("%s: ", (char *)matches->data); | |
| 3365 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, tmp, -1); | |
| 3366 g_free(tmp); | |
| 3367 } | |
| 3368 else | |
| 3369 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, | |
| 3370 matches->data, -1); | |
| 3371 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3372 g_free(matches->data); |
| 4359 | 3373 matches = g_list_remove(matches, matches->data); |
| 3374 } | |
| 3375 else { | |
| 3376 /* | |
| 3377 * there were lots of matches, fill in as much as possible | |
| 3378 * and display all of them | |
| 3379 */ | |
| 3380 char *addthis = g_malloc0(1); | |
| 3381 | |
| 3382 while (matches) { | |
| 3383 char *tmp = addthis; | |
| 3384 addthis = g_strconcat(tmp, matches->data, " ", NULL); | |
| 3385 g_free(tmp); | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3386 g_free(matches->data); |
| 4359 | 3387 matches = g_list_remove(matches, matches->data); |
| 3388 } | |
| 3389 | |
| 6982 | 3390 gaim_conversation_write(conv, NULL, addthis, GAIM_MESSAGE_NO_LOG, |
| 4359 | 3391 time(NULL)); |
| 3392 gtk_text_buffer_insert_at_cursor(gtkconv->entry_buffer, partial, -1); | |
| 3393 g_free(addthis); | |
| 3394 } | |
| 3395 | |
| 3396 g_free(entered); | |
| 3397 g_free(partial); | |
| 9605 | 3398 |
| 3399 return TRUE; | |
| 4359 | 3400 } |
| 3401 | |
| 10810 | 3402 static void topic_callback(GtkWidget *w, GaimGtkConversation *gtkconv) |
| 7971 | 3403 { |
| 3404 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 3405 GaimConnection *gc; | |
| 10810 | 3406 GaimConversation *conv = gtkconv->active_conv; |
| 7971 | 3407 GaimGtkChatPane *gtkchat; |
|
11261
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3408 char *new_topic; |
| 8858 | 3409 const char *current_topic; |
| 7971 | 3410 |
| 3411 gc = gaim_conversation_get_gc(conv); | |
| 3412 | |
| 3413 if(!gc || !(prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl))) | |
| 3414 return; | |
| 3415 | |
| 3416 if(prpl_info->set_chat_topic == NULL) | |
| 3417 return; | |
| 3418 | |
| 3419 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 3420 gtkchat = gtkconv->u.chat; | |
|
11261
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3421 new_topic = g_strdup(gtk_entry_get_text(GTK_ENTRY(gtkchat->topic_text))); |
| 8858 | 3422 current_topic = gaim_conv_chat_get_topic(GAIM_CONV_CHAT(conv)); |
| 3423 | |
|
11261
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3424 if(current_topic && !g_utf8_collate(new_topic, current_topic)){ |
|
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3425 g_free(new_topic); |
| 7971 | 3426 return; |
|
11261
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3427 } |
|
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3428 |
|
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3429 gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), current_topic); |
| 7971 | 3430 |
| 8858 | 3431 prpl_info->set_chat_topic(gc, gaim_conv_chat_get_id(GAIM_CONV_CHAT(conv)), |
| 3432 new_topic); | |
|
11261
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3433 |
|
b53606580f68
[gaim-migrate @ 13439]
Richard Laager <rlaager@wiktel.com>
parents:
11257
diff
changeset
|
3434 g_free(new_topic); |
| 7971 | 3435 } |
| 3436 | |
| 9554 | 3437 static gint |
| 3438 sort_chat_users(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer userdata) | |
| 3439 { | |
| 3440 GaimConvChatBuddyFlags f1 = 0, f2 = 0; | |
| 3441 char *user1 = NULL, *user2 = NULL; | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3442 gboolean buddy1 = FALSE, buddy2 = FALSE; |
| 9554 | 3443 gint ret = 0; |
| 3444 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3445 gtk_tree_model_get(model, a, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3446 CHAT_USERS_ALIAS_COLUMN, &user1, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3447 CHAT_USERS_FLAGS_COLUMN, &f1, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3448 CHAT_USERS_BUDDY_COLUMN, &buddy1, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3449 -1); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3450 gtk_tree_model_get(model, b, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3451 CHAT_USERS_ALIAS_COLUMN, &user2, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3452 CHAT_USERS_FLAGS_COLUMN, &f2, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3453 CHAT_USERS_BUDDY_COLUMN, &buddy2, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3454 -1); |
| 9554 | 3455 |
| 3456 if (user1 == NULL || user2 == NULL) { | |
| 3457 if (!(user1 == NULL && user2 == NULL)) | |
| 3458 ret = (user1 == NULL) ? -1: 1; | |
| 3459 } else if (f1 != f2) { | |
| 3460 /* sort more important users first */ | |
| 3461 ret = (f1 > f2) ? -1 : 1; | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3462 } else if (buddy1 != buddy2) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3463 ret = buddy1 ? -1 : 1; |
| 9554 | 3464 } else { |
| 10904 | 3465 ret = gaim_utf8_strcasecmp(user1, user2); |
| 9554 | 3466 } |
| 3467 | |
| 3468 g_free(user1); | |
| 3469 g_free(user2); | |
| 3470 | |
| 3471 return ret; | |
| 3472 } | |
| 3473 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3474 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3475 update_chat_alias(GaimBuddy *buddy, GaimConversation *conv, GaimConnection *gc, GaimPluginProtocolInfo *prpl_info) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3476 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3477 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
3478 GaimConvChat *chat = GAIM_CONV_CHAT(conv); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3479 GtkTreeModel *model; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3480 char *normalized_name; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3481 GtkTreeIter iter; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3482 int f; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3483 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3484 g_return_if_fail(buddy != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3485 g_return_if_fail(conv != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3486 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3487 /* This is safe because this callback is only used in chats, not IMs. */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3488 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkconv->u.chat->list)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3489 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3490 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3491 return; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3492 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3493 normalized_name = g_strdup(gaim_normalize(conv->account, buddy->name)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3494 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3495 do { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3496 char *name; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3497 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3498 gtk_tree_model_get(model, &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3499 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3500 if (!strcmp(normalized_name, gaim_normalize(conv->account, name))) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3501 const char *alias = name; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3502 GaimBuddy *buddy2; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3503 |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
3504 if (strcmp(chat->nick, gaim_normalize(conv->account, name))) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3505 /* This user is not me, so look into updating the alias. */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3506 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3507 if ((buddy2 = gaim_find_buddy(conv->account, name)) != NULL) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3508 alias = gaim_buddy_get_contact_alias(buddy2); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3509 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3510 gtk_list_store_set(GTK_LIST_STORE(model), &iter, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3511 CHAT_USERS_ALIAS_COLUMN, alias, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3512 -1); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3513 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3514 g_free(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3515 break; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3516 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3517 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3518 f = gtk_tree_model_iter_next(model, &iter); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3519 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3520 g_free(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3521 } while (f != 0); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3522 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3523 g_free(normalized_name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3524 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3525 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3526 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3527 blist_node_aliased_cb(GaimBlistNode *node, const char *old_alias, GaimConversation *conv) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3528 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3529 GaimConnection *gc; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3530 GaimPluginProtocolInfo *prpl_info; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3531 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3532 g_return_if_fail(node != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3533 g_return_if_fail(conv != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3534 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3535 gc = gaim_conversation_get_gc(conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3536 g_return_if_fail(gc != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3537 g_return_if_fail(gc->prpl != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3538 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3539 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3540 if (prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3541 return; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3542 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3543 if (GAIM_BLIST_NODE_IS_CONTACT(node)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3544 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3545 GaimBlistNode *bnode; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3546 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3547 for(bnode = node->child; bnode; bnode = bnode->next) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3548 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3549 if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3550 continue; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3551 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3552 update_chat_alias((GaimBuddy *)bnode, conv, gc, prpl_info); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3553 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3554 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3555 else if (GAIM_BLIST_NODE_IS_BUDDY(node)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3556 update_chat_alias((GaimBuddy *)node, conv, gc, prpl_info); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3557 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3558 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3559 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3560 buddy_cb_common(GaimBuddy *buddy, GaimConversation *conv, gboolean is_buddy) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3561 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3562 GtkTreeModel *model; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3563 char *normalized_name; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3564 GtkTreeIter iter; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3565 int f; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3566 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3567 g_return_if_fail(buddy != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3568 g_return_if_fail(conv != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3569 |
|
11846
908ff9b56e99
[gaim-migrate @ 14137]
Richard Laager <rlaager@wiktel.com>
parents:
11815
diff
changeset
|
3570 /* Do nothing if the buddy does not belong to the conv's account */ |
|
908ff9b56e99
[gaim-migrate @ 14137]
Richard Laager <rlaager@wiktel.com>
parents:
11815
diff
changeset
|
3571 if (gaim_buddy_get_account(buddy) != gaim_conversation_get_account(conv)) |
|
908ff9b56e99
[gaim-migrate @ 14137]
Richard Laager <rlaager@wiktel.com>
parents:
11815
diff
changeset
|
3572 return; |
|
908ff9b56e99
[gaim-migrate @ 14137]
Richard Laager <rlaager@wiktel.com>
parents:
11815
diff
changeset
|
3573 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3574 /* This is safe because this callback is only used in chats, not IMs. */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3575 model = gtk_tree_view_get_model(GTK_TREE_VIEW(GAIM_GTK_CONVERSATION(conv)->u.chat->list)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3576 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3577 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3578 return; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3579 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3580 normalized_name = g_strdup(gaim_normalize(conv->account, buddy->name)); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3581 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3582 do { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3583 char *name; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3584 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3585 gtk_tree_model_get(model, &iter, CHAT_USERS_NAME_COLUMN, &name, -1); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3586 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3587 if (!strcmp(normalized_name, gaim_normalize(conv->account, name))) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3588 gtk_list_store_set(GTK_LIST_STORE(model), &iter, CHAT_USERS_BUDDY_COLUMN, is_buddy, -1); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3589 g_free(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3590 break; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3591 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3592 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3593 f = gtk_tree_model_iter_next(model, &iter); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3594 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3595 g_free(name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3596 } while (f != 0); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3597 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3598 g_free(normalized_name); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3599 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3600 blist_node_aliased_cb((GaimBlistNode *)buddy, NULL, conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3601 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3602 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3603 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3604 buddy_added_cb(GaimBuddy *buddy, GaimConversation *conv) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3605 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3606 buddy_cb_common(buddy, conv, TRUE); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3607 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3608 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3609 static void |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3610 buddy_removed_cb(GaimBuddy *buddy, GaimConversation *conv) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3611 { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3612 /* If there's another buddy for the same "dude" on the list, do nothing. */ |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3613 if (gaim_find_buddy(buddy->account, buddy->name) != NULL) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3614 return; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3615 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3616 buddy_cb_common(buddy, conv, FALSE); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3617 } |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3618 |
|
12636
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3619 static void |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3620 entry_popup_menu_cb(GtkIMHtml *imhtml, GtkMenu *menu, gpointer data) |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3621 { |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3622 GtkWidget *menuitem; |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3623 GaimGtkConversation *gtkconv = data; |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3624 |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3625 g_return_if_fail(menu != NULL); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3626 g_return_if_fail(gtkconv != NULL); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3627 |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3628 menuitem = gaim_new_item_from_stock(NULL, _("_Send"), GAIM_STOCK_SEND, |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3629 G_CALLBACK(send_cb), gtkconv, |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3630 0, 0, NULL); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3631 if (gtk_text_buffer_get_char_count(imhtml->text_buffer) == 0) |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3632 gtk_widget_set_sensitive(menuitem, FALSE); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3633 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 0); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3634 |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3635 menuitem = gtk_separator_menu_item_new(); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3636 gtk_widget_show(menuitem); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3637 gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuitem, 1); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3638 } |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3639 |
| 4359 | 3640 static GtkWidget * |
| 10810 | 3641 setup_chat_pane(GaimGtkConversation *gtkconv) |
| 4359 | 3642 { |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3643 GaimPluginProtocolInfo *prpl_info = NULL; |
| 10810 | 3644 GaimConversation *conv = gtkconv->active_conv; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
3645 GaimGtkChatPane *gtkchat; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
3646 GaimConnection *gc; |
| 4359 | 3647 GtkWidget *vpaned, *hpaned; |
| 10175 | 3648 GtkWidget *vbox, *hbox, *frame; |
| 4359 | 3649 GtkWidget *lbox, *bbox; |
| 3650 GtkWidget *label; | |
| 3651 GtkWidget *list; | |
| 3652 GtkWidget *button; | |
| 7949 | 3653 GtkWidget *sw; |
| 4359 | 3654 GtkListStore *ls; |
| 3655 GtkCellRenderer *rend; | |
| 3656 GtkTreeViewColumn *col; | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3657 void *blist_handle = gaim_blist_get_handle(); |
| 9080 | 3658 GList *focus_chain = NULL; |
| 4359 | 3659 |
| 3660 gtkchat = gtkconv->u.chat; | |
| 3661 gc = gaim_conversation_get_gc(conv); | |
| 3662 | |
| 3663 /* Setup the outer pane. */ | |
| 3664 vpaned = gtk_vpaned_new(); | |
| 3665 gtk_widget_show(vpaned); | |
| 3666 | |
| 3667 /* Setup the top part of the pane. */ | |
| 11243 | 3668 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 8914 | 3669 gtk_paned_pack1(GTK_PANED(vpaned), vbox, TRUE, TRUE); |
| 4359 | 3670 gtk_widget_show(vbox); |
| 3671 | |
|
5205
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3672 if (gc != NULL) |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3673 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3674 |
|
fefad67de2c7
[gaim-migrate @ 5573]
Christian Hammond <chipx86@chipx86.com>
parents:
5204
diff
changeset
|
3675 if (prpl_info->options & OPT_PROTO_CHAT_TOPIC) |
| 4359 | 3676 { |
| 11243 | 3677 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
|
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3678 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
| 4359 | 3679 gtk_widget_show(hbox); |
| 3680 | |
| 3681 label = gtk_label_new(_("Topic:")); | |
|
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3682 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
| 4359 | 3683 gtk_widget_show(label); |
| 3684 | |
| 3685 gtkchat->topic_text = gtk_entry_new(); | |
|
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3686 |
| 7971 | 3687 if(prpl_info->set_chat_topic == NULL) { |
| 3688 gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); | |
| 3689 } else { | |
| 3690 g_signal_connect(GTK_OBJECT(gtkchat->topic_text), "activate", | |
| 10810 | 3691 G_CALLBACK(topic_callback), gtkconv); |
| 7971 | 3692 } |
| 3693 | |
|
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3694 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); |
| 4359 | 3695 gtk_widget_show(gtkchat->topic_text); |
| 3696 } | |
| 3697 | |
| 3698 /* Setup the horizontal pane. */ | |
| 3699 hpaned = gtk_hpaned_new(); | |
|
8253
0c5977fd3101
[gaim-migrate @ 8976]
Christian Hammond <chipx86@chipx86.com>
parents:
8252
diff
changeset
|
3700 gtk_box_pack_start(GTK_BOX(vbox), hpaned, TRUE, TRUE, 0); |
| 4359 | 3701 gtk_widget_show(hpaned); |
| 3702 | |
| 10175 | 3703 /* Setup gtkihmtml. */ |
| 3704 frame = gaim_gtk_create_imhtml(FALSE, >kconv->imhtml, NULL); | |
| 3705 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml"); | |
| 10389 | 3706 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), TRUE); |
| 10175 | 3707 gtk_paned_pack1(GTK_PANED(hpaned), frame, TRUE, TRUE); |
| 3708 gtk_widget_show(frame); | |
| 3709 | |
| 3710 gtk_widget_set_size_request(gtkconv->imhtml, | |
|
5550
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
3711 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_width"), |
|
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
3712 gaim_prefs_get_int("/gaim/gtk/conversations/chat/default_height")); |
| 10175 | 3713 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
| 10810 | 3714 G_CALLBACK(size_allocate_cb), gtkconv); |
| 8914 | 3715 |
| 4359 | 3716 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", |
| 3717 G_CALLBACK(entry_stop_rclick_cb), NULL); | |
| 8105 | 3718 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
| 6057 | 3719 G_CALLBACK(refocus_entry_cb), gtkconv); |
| 8109 | 3720 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
| 3721 G_CALLBACK(refocus_entry_cb), gtkconv); | |
| 4359 | 3722 |
| 3723 /* Build the right pane. */ | |
| 11243 | 3724 lbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
|
4409
0521eec12c33
[gaim-migrate @ 4682]
Christian Hammond <chipx86@chipx86.com>
parents:
4398
diff
changeset
|
3725 gtk_paned_pack2(GTK_PANED(hpaned), lbox, FALSE, TRUE); |
| 4359 | 3726 gtk_widget_show(lbox); |
| 3727 | |
| 3728 /* Setup the label telling how many people are in the room. */ | |
| 3729 gtkchat->count = gtk_label_new(_("0 people in room")); | |
| 3730 gtk_box_pack_start(GTK_BOX(lbox), gtkchat->count, FALSE, FALSE, 0); | |
| 3731 gtk_widget_show(gtkchat->count); | |
| 3732 | |
| 3733 /* Setup the list of users. */ | |
| 7949 | 3734 sw = gtk_scrolled_window_new(NULL, NULL); |
| 3735 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), | |
| 8076 | 3736 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
| 7949 | 3737 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); |
| 3738 gtk_box_pack_start(GTK_BOX(lbox), sw, TRUE, TRUE, 0); | |
| 3739 gtk_widget_show(sw); | |
| 4359 | 3740 |
| 9554 | 3741 ls = gtk_list_store_new(CHAT_USERS_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3742 G_TYPE_STRING, G_TYPE_INT, GDK_TYPE_COLOR, G_TYPE_BOOLEAN); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3743 gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_COLUMN, |
| 9554 | 3744 sort_chat_users, NULL, NULL); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3745 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_COLUMN, |
| 4359 | 3746 GTK_SORT_ASCENDING); |
| 3747 | |
| 3748 list = gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls)); | |
| 3749 | |
| 9498 | 3750 rend = gtk_cell_renderer_pixbuf_new(); |
| 3751 | |
| 4359 | 3752 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
| 9498 | 3753 "pixbuf", CHAT_USERS_ICON_COLUMN, NULL); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3754 gtk_tree_view_column_set_sizing(col, GTK_TREE_VIEW_COLUMN_AUTOSIZE); |
| 9498 | 3755 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); |
| 4359 | 3756 |
| 3757 g_signal_connect(G_OBJECT(list), "button_press_event", | |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
3758 G_CALLBACK(right_click_chat_cb), gtkconv); |
| 8143 | 3759 g_signal_connect(G_OBJECT(list), "popup-menu", |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
3760 G_CALLBACK(gtkconv_chat_popup_menu_cb), gtkconv); |
| 4359 | 3761 |
| 9498 | 3762 rend = gtk_cell_renderer_text_new(); |
| 3763 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3764 g_object_set(rend, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3765 "foreground-set", TRUE, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3766 "weight", PANGO_WEIGHT_BOLD, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3767 NULL); |
| 4359 | 3768 col = gtk_tree_view_column_new_with_attributes(NULL, rend, |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3769 "text", CHAT_USERS_ALIAS_COLUMN, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3770 "foreground-gdk", CHAT_USERS_COLOR_COLUMN, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3771 "weight-set", CHAT_USERS_BUDDY_COLUMN, |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3772 NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3773 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3774 gaim_signal_connect(blist_handle, "buddy-added", |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3775 gtkchat, GAIM_CALLBACK(buddy_added_cb), conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3776 gaim_signal_connect(blist_handle, "buddy-removed", |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3777 gtkchat, GAIM_CALLBACK(buddy_removed_cb), conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3778 gaim_signal_connect(blist_handle, "blist-node-aliased", |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3779 gtkchat, GAIM_CALLBACK(blist_node_aliased_cb), conv); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3780 |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3781 #if GTK_CHECK_VERSION(2,6,0) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3782 gtk_tree_view_column_set_expand(col, TRUE); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3783 g_object_set(rend, "ellipsize", PANGO_ELLIPSIZE_END, NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
3784 #endif |
| 4359 | 3785 |
| 3786 gtk_tree_view_append_column(GTK_TREE_VIEW(list), col); | |
| 3787 | |
| 3788 gtk_widget_set_size_request(list, 150, -1); | |
| 3789 | |
| 3790 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(list), FALSE); | |
| 3791 gtk_widget_show(list); | |
| 3792 | |
| 3793 gtkchat->list = list; | |
| 3794 | |
| 7949 | 3795 gtk_container_add(GTK_CONTAINER(sw), list); |
| 4359 | 3796 |
| 3797 /* Setup the user list toolbar. */ | |
| 11243 | 3798 bbox = gtk_hbox_new(TRUE, GAIM_HIG_BOX_SPACE); |
| 4359 | 3799 gtk_box_pack_start(GTK_BOX(lbox), bbox, FALSE, FALSE, 0); |
| 3800 gtk_widget_show(bbox); | |
| 3801 | |
| 3802 /* IM */ | |
| 10221 | 3803 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_IM, |
| 4359 | 3804 GAIM_BUTTON_VERTICAL); |
| 10500 | 3805 gtkchat->userlist_im = button; |
| 4359 | 3806 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 3807 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
|
3808 gtk_tooltips_set_tip(gtkconv->tooltips, button, _("IM the user"), NULL); |
| 4359 | 3809 g_signal_connect(G_OBJECT(button), "clicked", |
| 10810 | 3810 G_CALLBACK(chat_im_button_cb), gtkconv); |
| 4359 | 3811 |
| 3812 gtk_widget_show(button); | |
| 3813 | |
| 3814 /* Ignore */ | |
| 3815 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_IGNORE, | |
| 3816 GAIM_BUTTON_VERTICAL); | |
| 10500 | 3817 gtkchat->userlist_ignore = button; |
| 4359 | 3818 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 3819 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
|
3820 gtk_tooltips_set_tip(gtkconv->tooltips, button, |
|
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
3821 _("Ignore the user"), NULL); |
| 4359 | 3822 g_signal_connect(G_OBJECT(button), "clicked", |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
3823 G_CALLBACK(ignore_cb), gtkconv); |
| 4359 | 3824 gtk_widget_show(button); |
| 3825 | |
| 3826 /* Info */ | |
| 3827 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_INFO, | |
| 3828 GAIM_BUTTON_VERTICAL); | |
| 10500 | 3829 gtkchat->userlist_info = button; |
| 4359 | 3830 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); |
| 3831 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | |
| 3832 gtk_tooltips_set_tip(gtkconv->tooltips, button, | |
|
4370
d856987c72ca
[gaim-migrate @ 4636]
Christian Hammond <chipx86@chipx86.com>
parents:
4369
diff
changeset
|
3833 _("Get the user's information"), NULL); |
| 4359 | 3834 g_signal_connect(G_OBJECT(button), "clicked", |
| 10810 | 3835 G_CALLBACK(info_cb), gtkconv); |
| 4359 | 3836 |
| 3837 gtk_widget_show(button); | |
| 3838 | |
| 10175 | 3839 /* Setup the bottom half of the conversation window */ |
| 11243 | 3840 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 8914 | 3841 gtk_paned_pack2(GTK_PANED(vpaned), vbox, FALSE, TRUE); |
|
4963
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
3842 gtk_widget_show(vbox); |
|
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
3843 |
| 11243 | 3844 gtkconv->lower_hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 9332 | 3845 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->lower_hbox, TRUE, TRUE, 0); |
| 3846 gtk_widget_show(gtkconv->lower_hbox); | |
| 3847 | |
| 11243 | 3848 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 9332 | 3849 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox, TRUE, TRUE, 0); |
| 3850 gtk_widget_show(vbox); | |
| 3851 | |
| 10175 | 3852 /* Setup the toolbar, entry widget and all signals */ |
| 3853 frame = gaim_gtk_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar); | |
| 10080 | 3854 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
| 10175 | 3855 gtk_widget_show(frame); |
| 3856 | |
|
12636
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3857 g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3858 G_CALLBACK(entry_popup_menu_cb), gtkconv); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3859 |
| 9005 | 3860 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); |
| 8456 | 3861 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
| 9699 | 3862 gaim_account_get_protocol_name(conv->account)); |
| 10175 | 3863 gtk_widget_set_size_request(gtkconv->entry, -1, |
| 3864 gaim_prefs_get_int("/gaim/gtk/conversations/chat/entry_height")); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3865 gtkconv->entry_buffer = |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3866 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
| 10810 | 3867 g_object_set_data(G_OBJECT(gtkconv->entry_buffer), "user_data", gtkconv); |
| 7949 | 3868 |
| 3869 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", | |
| 10810 | 3870 G_CALLBACK(entry_key_press_cb), gtkconv); |
| 10115 | 3871 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", |
| 10810 | 3872 G_CALLBACK(send_cb), gtkconv); |
| 4359 | 3873 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
| 10810 | 3874 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| 8914 | 3875 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", |
| 10810 | 3876 G_CALLBACK(size_allocate_cb), gtkconv); |
| 3877 | |
| 3878 default_formatize(gtkconv); | |
| 4359 | 3879 |
| 9080 | 3880 /* |
| 3881 * Focus for chat windows should be as follows: | |
| 3882 * Tab title -> chat topic -> conversation scrollback -> user list -> | |
| 3883 * user list buttons -> entry -> buttons at bottom | |
| 3884 */ | |
| 9332 | 3885 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
| 9080 | 3886 gtk_container_set_focus_chain(GTK_CONTAINER(vbox), focus_chain); |
| 3887 | |
| 4359 | 3888 return vpaned; |
| 3889 } | |
| 3890 | |
| 3891 static GtkWidget * | |
| 10810 | 3892 setup_im_pane(GaimGtkConversation *gtkconv) |
| 4359 | 3893 { |
| 10810 | 3894 GaimConversation *conv = gtkconv->active_conv; |
| 10175 | 3895 GtkWidget *frame; |
| 4359 | 3896 GtkWidget *paned; |
| 10175 | 3897 GtkWidget *vbox; |
| 3898 GtkWidget *vbox2; | |
| 9080 | 3899 GList *focus_chain = NULL; |
| 4359 | 3900 |
| 10175 | 3901 /* Setup the outer pane */ |
| 4359 | 3902 paned = gtk_vpaned_new(); |
| 3903 gtk_widget_show(paned); | |
| 3904 | |
| 10175 | 3905 /* Setup the top part of the pane */ |
| 11243 | 3906 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
|
4409
0521eec12c33
[gaim-migrate @ 4682]
Christian Hammond <chipx86@chipx86.com>
parents:
4398
diff
changeset
|
3907 gtk_paned_pack1(GTK_PANED(paned), vbox, TRUE, TRUE); |
| 4359 | 3908 gtk_widget_show(vbox); |
| 3909 | |
| 10175 | 3910 /* Setup the gtkimhtml widget */ |
| 3911 frame = gaim_gtk_create_imhtml(FALSE, >kconv->imhtml, NULL); | |
| 3912 gtk_widget_set_name(gtkconv->imhtml, "gaim_gtkconv_imhtml"); | |
| 10389 | 3913 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),TRUE); |
| 10175 | 3914 gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 0); |
| 3915 gtk_widget_show(frame); | |
| 3916 | |
| 3917 gtk_widget_set_size_request(gtkconv->imhtml, | |
|
5550
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
3918 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_width"), |
|
b18c2a37cc96
[gaim-migrate @ 5951]
Christian Hammond <chipx86@chipx86.com>
parents:
5546
diff
changeset
|
3919 gaim_prefs_get_int("/gaim/gtk/conversations/im/default_height")); |
| 10175 | 3920 g_signal_connect(G_OBJECT(gtkconv->imhtml), "size-allocate", |
| 10810 | 3921 G_CALLBACK(size_allocate_cb), gtkconv); |
| 4359 | 3922 |
| 3923 g_signal_connect_after(G_OBJECT(gtkconv->imhtml), "button_press_event", | |
| 10810 | 3924 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| 8105 | 3925 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_press_event", |
| 10810 | 3926 G_CALLBACK(refocus_entry_cb), gtkconv); |
| 8109 | 3927 g_signal_connect(G_OBJECT(gtkconv->imhtml), "key_release_event", |
| 10810 | 3928 G_CALLBACK(refocus_entry_cb), gtkconv); |
| 4359 | 3929 |
| 10175 | 3930 /* Setup the bottom half of the conversation window */ |
| 11243 | 3931 vbox2 = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 8914 | 3932 gtk_paned_pack2(GTK_PANED(paned), vbox2, FALSE, TRUE); |
|
4963
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
3933 gtk_widget_show(vbox2); |
|
7f5e7f2ef317
[gaim-migrate @ 5297]
Christian Hammond <chipx86@chipx86.com>
parents:
4958
diff
changeset
|
3934 |
| 11243 | 3935 gtkconv->lower_hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 9332 | 3936 gtk_box_pack_start(GTK_BOX(vbox2), gtkconv->lower_hbox, TRUE, TRUE, 0); |
| 3937 gtk_widget_show(gtkconv->lower_hbox); | |
| 3938 | |
| 11243 | 3939 vbox2 = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 9332 | 3940 gtk_box_pack_end(GTK_BOX(gtkconv->lower_hbox), vbox2, TRUE, TRUE, 0); |
| 3941 gtk_widget_show(vbox2); | |
| 8821 | 3942 |
| 10175 | 3943 /* Setup the toolbar, entry widget and all signals */ |
| 3944 frame = gaim_gtk_create_imhtml(TRUE, >kconv->entry, >kconv->toolbar); | |
| 10080 | 3945 gtk_box_pack_start(GTK_BOX(vbox2), frame, TRUE, TRUE, 0); |
| 10175 | 3946 gtk_widget_show(frame); |
| 3947 | |
|
12636
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3948 g_signal_connect(G_OBJECT(gtkconv->entry), "populate-popup", |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3949 G_CALLBACK(entry_popup_menu_cb), gtkconv); |
|
886498a66961
[gaim-migrate @ 14972]
Richard Laager <rlaager@wiktel.com>
parents:
12624
diff
changeset
|
3950 |
| 9005 | 3951 gtk_widget_set_name(gtkconv->entry, "gaim_gtkconv_entry"); |
| 8456 | 3952 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->entry), |
| 9699 | 3953 gaim_account_get_protocol_name(conv->account)); |
| 10175 | 3954 gtk_widget_set_size_request(gtkconv->entry, -1, |
| 3955 gaim_prefs_get_int("/gaim/gtk/conversations/im/entry_height")); | |
|
8407
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3956 gtkconv->entry_buffer = |
|
15614a7cdc13
[gaim-migrate @ 9137]
Christian Hammond <chipx86@chipx86.com>
parents:
8380
diff
changeset
|
3957 gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->entry)); |
| 10810 | 3958 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
|
3959 |
| 4359 | 3960 g_signal_connect(G_OBJECT(gtkconv->entry), "key_press_event", |
| 10810 | 3961 G_CALLBACK(entry_key_press_cb), gtkconv); |
| 3962 g_signal_connect(G_OBJECT(gtkconv->entry), "message_send", G_CALLBACK(send_cb), gtkconv); | |
| 4359 | 3963 g_signal_connect_after(G_OBJECT(gtkconv->entry), "button_press_event", |
| 10810 | 3964 G_CALLBACK(entry_stop_rclick_cb), NULL); |
| 8914 | 3965 g_signal_connect(G_OBJECT(gtkconv->entry), "size-allocate", |
| 10810 | 3966 G_CALLBACK(size_allocate_cb), gtkconv); |
| 4359 | 3967 |
| 3968 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "insert_text", | |
| 10810 | 3969 G_CALLBACK(insert_text_cb), gtkconv); |
| 4359 | 3970 g_signal_connect(G_OBJECT(gtkconv->entry_buffer), "delete_range", |
| 10810 | 3971 G_CALLBACK(delete_text_cb), gtkconv); |
| 4359 | 3972 |
| 8481 | 3973 /* had to move this after the imtoolbar is attached so that the |
| 3974 * signals get fired to toggle the buttons on the toolbar as well. | |
| 3975 */ | |
| 10810 | 3976 default_formatize(gtkconv); |
| 4359 | 3977 |
|
11275
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
3978 g_signal_connect_after(G_OBJECT(gtkconv->entry), "format_function_clear", |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
3979 G_CALLBACK(clear_formatting_cb), gtkconv); |
|
ffc86d9ad8b7
[gaim-migrate @ 13461]
Richard Laager <rlaager@wiktel.com>
parents:
11269
diff
changeset
|
3980 |
| 8758 | 3981 gtkconv->u.im->animate = gaim_prefs_get_bool("/gaim/gtk/conversations/im/animate_buddy_icons"); |
| 9687 | 3982 gtkconv->u.im->show_icon = TRUE; |
| 4359 | 3983 |
| 9080 | 3984 /* |
| 3985 * Focus for IM windows should be as follows: | |
| 10356 | 3986 * Tab title -> conversation scrollback -> entry |
| 9080 | 3987 */ |
| 9332 | 3988 focus_chain = g_list_prepend(focus_chain, gtkconv->entry); |
| 9080 | 3989 gtk_container_set_focus_chain(GTK_CONTAINER(vbox2), focus_chain); |
| 8143 | 3990 |
| 4359 | 3991 return paned; |
| 3992 } | |
| 3993 | |
| 3994 static void | |
|
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3995 conv_dnd_recv(GtkWidget *widget, GdkDragContext *dc, guint x, guint y, |
| 10810 | 3996 GtkSelectionData *sd, guint info, guint t, |
| 3997 GaimGtkConversation *gtkconv) | |
|
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
3998 { |
| 10810 | 3999 GaimConversation *conv = gtkconv->active_conv; |
| 11581 | 4000 GaimGtkWindow *win = gtkconv->win; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4001 GaimConversation *c; |
|
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4002 if (sd->target == gdk_atom_intern("GAIM_BLIST_NODE", FALSE)) |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4003 { |
| 4781 | 4004 GaimBlistNode *n = NULL; |
| 6695 | 4005 GaimBuddy *b; |
| 11581 | 4006 GaimGtkConversation *gtkconv = NULL; |
| 9622 | 4007 |
| 11812 | 4008 n = *(GaimBlistNode **)sd->data; |
|
4939
4d50e125b0fa
[gaim-migrate @ 5273]
Christian Hammond <chipx86@chipx86.com>
parents:
4931
diff
changeset
|
4009 |
| 6695 | 4010 if (GAIM_BLIST_NODE_IS_CONTACT(n)) |
| 4011 b = gaim_contact_get_priority_buddy((GaimContact*)n); | |
| 4012 else if (GAIM_BLIST_NODE_IS_BUDDY(n)) | |
| 4013 b = (GaimBuddy*)n; | |
| 4014 else | |
| 4781 | 4015 return; |
|
4939
4d50e125b0fa
[gaim-migrate @ 5273]
Christian Hammond <chipx86@chipx86.com>
parents:
4931
diff
changeset
|
4016 |
| 9622 | 4017 /* |
| 4018 * If we already have an open conversation with this buddy, then | |
| 4019 * just move the conv to this window. Otherwise, create a new | |
| 4020 * conv and add it to this window. | |
| 4021 */ | |
| 11338 | 4022 c = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, b->name, b->account); |
| 9622 | 4023 if (c != NULL) { |
| 11581 | 4024 GaimGtkWindow *oldwin; |
| 4025 gtkconv = GAIM_GTK_CONVERSATION(c); | |
| 4026 oldwin = gtkconv->win; | |
| 9622 | 4027 if (oldwin != win) { |
| 11581 | 4028 gaim_gtk_conv_window_remove_gtkconv(oldwin, gtkconv); |
| 4029 gaim_gtk_conv_window_add_gtkconv(win, gtkconv); | |
| 9622 | 4030 } |
| 4031 } else { | |
| 11338 | 4032 c = gaim_conversation_new(GAIM_CONV_TYPE_IM, b->account, b->name); |
| 11581 | 4033 gtkconv = GAIM_GTK_CONVERSATION(c); |
| 11812 | 4034 if (gtkconv->win != win) |
| 4035 { | |
| 4036 gaim_gtk_conv_window_remove_gtkconv(gtkconv->win, gtkconv); | |
| 4037 gaim_gtk_conv_window_add_gtkconv(win, gtkconv); | |
| 4038 } | |
| 9622 | 4039 } |
| 4040 | |
| 4041 /* Make this conversation the active conversation */ | |
| 11581 | 4042 gaim_gtk_conv_window_switch_gtkconv(win, gtkconv); |
|
8802
1076cd8579ea
[gaim-migrate @ 9564]
Christian Hammond <chipx86@chipx86.com>
parents:
8758
diff
changeset
|
4043 |
|
1076cd8579ea
[gaim-migrate @ 9564]
Christian Hammond <chipx86@chipx86.com>
parents:
8758
diff
changeset
|
4044 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
| 4702 | 4045 } |
|
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4046 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
|
4047 { |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4048 char *protocol = NULL; |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4049 char *username = NULL; |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4050 GaimAccount *account; |
| 11581 | 4051 GaimGtkConversation *gtkconv; |
|
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4052 |
| 11137 | 4053 if (gaim_gtk_parse_x_im_contact((const char *)sd->data, FALSE, &account, |
| 7718 | 4054 &protocol, &username, NULL)) |
|
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4055 { |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4056 if (account == NULL) |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4057 { |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4058 gaim_notify_error(NULL, NULL, |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4059 _("You are not currently signed on with an account that " |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4060 "can add that buddy."), NULL); |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4061 } |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4062 else |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4063 { |
| 11338 | 4064 c = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, username); |
| 11581 | 4065 gtkconv = GAIM_GTK_CONVERSATION(c); |
| 11812 | 4066 if (gtkconv->win != win) |
| 4067 { | |
| 4068 gaim_gtk_conv_window_remove_gtkconv(gtkconv->win, gtkconv); | |
| 4069 gaim_gtk_conv_window_add_gtkconv(win, gtkconv); | |
| 4070 } | |
|
7712
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4071 } |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4072 } |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4073 |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4074 if (username != NULL) g_free(username); |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4075 if (protocol != NULL) g_free(protocol); |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4076 |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4077 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
|
2823111061ba
[gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents:
7700
diff
changeset
|
4078 } |
| 9525 | 4079 else if (sd->target == gdk_atom_intern("text/uri-list", FALSE)) { |
| 11338 | 4080 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 10229 | 4081 gaim_dnd_file_manage(sd, gaim_conversation_get_account(conv), gaim_conversation_get_name(conv)); |
| 10145 | 4082 gtk_drag_finish(dc, TRUE, (dc->action == GDK_ACTION_MOVE), t); |
| 9495 | 4083 } |
| 10145 | 4084 else |
| 4085 gtk_drag_finish(dc, FALSE, FALSE, t); | |
|
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4086 } |
| 4359 | 4087 |
| 4088 | |
|
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4089 static const GtkTargetEntry te[] = |
|
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4090 { |
| 10145 | 4091 GTK_IMHTML_DND_TARGETS, |
| 4092 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, GTK_IMHTML_DRAG_NUM}, | |
| 4093 {"application/x-im-contact", 0, GTK_IMHTML_DRAG_NUM + 1} | |
|
4689
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4094 }; |
|
69b19e132df0
[gaim-migrate @ 5000]
Christian Hammond <chipx86@chipx86.com>
parents:
4687
diff
changeset
|
4095 |
| 10810 | 4096 static GaimGtkConversation * |
| 4097 gaim_gtk_conv_find_gtkconv(GaimConversation * conv) | |
| 4098 { | |
| 4099 GaimBuddy *bud = gaim_find_buddy(conv->account, conv->name), *b; | |
| 4100 GaimContact *c; | |
| 4101 GaimBlistNode *cn; | |
| 10935 | 4102 |
| 10810 | 4103 if (!bud) |
| 4104 return NULL; | |
| 10935 | 4105 |
| 10810 | 4106 if (!(c = gaim_buddy_get_contact(bud))) |
| 4107 return NULL; | |
| 10935 | 4108 |
| 10810 | 4109 cn = (GaimBlistNode *)c; |
| 4110 for (b = (GaimBuddy *)cn->child; b; b = (GaimBuddy *) ((GaimBlistNode *)b)->next) { | |
| 4111 GaimConversation *conv; | |
| 11338 | 4112 if ((conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, b->name, b->account))) { |
| 10810 | 4113 if (conv->ui_data) |
| 4114 return conv->ui_data; | |
| 4115 } | |
| 4116 } | |
| 10935 | 4117 |
| 10810 | 4118 return NULL; |
| 4119 } | |
| 4120 | |
| 11855 | 4121 static void |
| 4122 buddy_update_cb(GaimBlistNode *bnode, gpointer null) | |
| 4123 { | |
| 4124 GList *list; | |
| 4125 | |
| 4126 g_return_if_fail(bnode); | |
| 4127 g_return_if_fail(GAIM_BLIST_NODE_IS_BUDDY(bnode)); | |
| 4128 | |
| 4129 for (list = gaim_gtk_conv_windows_get_list(); list; list = list->next) | |
| 4130 { | |
| 4131 GaimGtkWindow *win = list->data; | |
| 4132 GaimConversation *conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 4133 | |
| 4134 if (gaim_conversation_get_type(conv) != GAIM_CONV_TYPE_IM) | |
| 4135 continue; | |
| 4136 | |
| 4137 gaim_conversation_update(conv, GAIM_CONV_ACCOUNT_ONLINE); | |
| 4138 } | |
| 4139 } | |
| 4140 | |
| 11581 | 4141 /************************************************************************** |
| 4142 * Conversation UI operations | |
| 4143 **************************************************************************/ | |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4144 static void |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4145 private_gtkconv_new(GaimConversation *conv, gboolean hidden) |
| 11581 | 4146 { |
| 4147 GaimGtkConversation *gtkconv; | |
| 4148 GaimConversationType conv_type = gaim_conversation_get_type(conv); | |
| 4359 | 4149 GtkWidget *pane = NULL; |
| 4150 GtkWidget *tab_cont; | |
| 11581 | 4151 |
| 4152 if (conv_type == GAIM_CONV_TYPE_IM && (gtkconv = gaim_gtk_conv_find_gtkconv(conv))) { | |
| 10810 | 4153 conv->ui_data = gtkconv; |
| 4154 if (!g_list_find(gtkconv->convs, conv)) | |
| 4155 gtkconv->convs = g_list_prepend(gtkconv->convs, conv); | |
| 11604 | 4156 gaim_gtkconv_switch_active_conversation(conv); |
| 10810 | 4157 return; |
| 4359 | 4158 } |
| 4159 | |
| 11581 | 4160 gtkconv = g_new0(GaimGtkConversation, 1); |
| 4161 conv->ui_data = gtkconv; | |
| 4162 gtkconv->active_conv = conv; | |
| 4163 gtkconv->convs = g_list_prepend(gtkconv->convs, conv); | |
| 4164 | |
| 4165 /* Setup some initial variables. */ | |
| 4166 gtkconv->sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH); | |
| 4167 gtkconv->tooltips = gtk_tooltips_new(); | |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
4168 gtkconv->unseen_state = GAIM_UNSEEN_NONE; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
4169 gtkconv->unseen_count = 0; |
| 11581 | 4170 |
| 4171 if (conv_type == GAIM_CONV_TYPE_IM) { | |
| 4172 gtkconv->u.im = g_malloc0(sizeof(GaimGtkImPane)); | |
| 4173 | |
| 4174 pane = setup_im_pane(gtkconv); | |
| 4175 } else if (conv_type == GAIM_CONV_TYPE_CHAT) { | |
| 4176 gtkconv->u.chat = g_malloc0(sizeof(GaimGtkChatPane)); | |
| 4177 pane = setup_chat_pane(gtkconv); | |
| 4178 } | |
| 4179 | |
| 12101 | 4180 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->imhtml), |
| 4181 gtk_imhtml_get_format_functions(GTK_IMHTML(gtkconv->imhtml)) | GTK_IMHTML_IMAGE); | |
| 4182 | |
| 11581 | 4183 if (pane == NULL) { |
| 4184 if (conv_type == GAIM_CONV_TYPE_CHAT) | |
| 4185 g_free(gtkconv->u.chat); | |
| 4186 else if (conv_type == GAIM_CONV_TYPE_IM) | |
| 4187 g_free(gtkconv->u.im); | |
| 4188 | |
| 4189 g_free(gtkconv); | |
| 4190 conv->ui_data = NULL; | |
| 4191 return; | |
| 10449 | 4192 } |
| 11581 | 4193 |
| 4194 /* Setup drag-and-drop */ | |
| 4195 gtk_drag_dest_set(pane, | |
| 4196 GTK_DEST_DEFAULT_MOTION | | |
| 4197 GTK_DEST_DEFAULT_DROP, | |
| 4198 te, sizeof(te) / sizeof(GtkTargetEntry), | |
| 4199 GDK_ACTION_COPY); | |
| 4200 gtk_drag_dest_set(pane, | |
| 4201 GTK_DEST_DEFAULT_MOTION | | |
| 4202 GTK_DEST_DEFAULT_DROP, | |
| 4203 te, sizeof(te) / sizeof(GtkTargetEntry), | |
| 4204 GDK_ACTION_COPY); | |
| 4205 gtk_drag_dest_set(gtkconv->imhtml, 0, | |
| 4206 te, sizeof(te) / sizeof(GtkTargetEntry), | |
| 4207 GDK_ACTION_COPY); | |
| 4208 | |
| 4209 gtk_drag_dest_set(gtkconv->entry, 0, | |
| 4210 te, sizeof(te) / sizeof(GtkTargetEntry), | |
| 4211 GDK_ACTION_COPY); | |
| 4212 | |
| 4213 g_signal_connect(G_OBJECT(pane), "drag_data_received", | |
| 4214 G_CALLBACK(conv_dnd_recv), gtkconv); | |
| 4215 g_signal_connect(G_OBJECT(gtkconv->imhtml), "drag_data_received", | |
| 4216 G_CALLBACK(conv_dnd_recv), gtkconv); | |
| 4217 g_signal_connect(G_OBJECT(gtkconv->entry), "drag_data_received", | |
| 4218 G_CALLBACK(conv_dnd_recv), gtkconv); | |
| 4219 | |
| 4220 /* Setup the container for the tab. */ | |
| 4221 gtkconv->tab_cont = tab_cont = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); | |
| 4222 g_object_set_data(G_OBJECT(tab_cont), "GaimGtkConversation", gtkconv); | |
| 4223 gtk_container_set_border_width(GTK_CONTAINER(tab_cont), GAIM_HIG_BOX_SPACE); | |
| 4224 gtk_container_add(GTK_CONTAINER(tab_cont), pane); | |
| 4225 gtk_widget_show(pane); | |
| 4226 | |
| 4227 gtkconv->make_sound = TRUE; | |
| 4228 | |
| 4229 if (gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar")) | |
| 4230 gtk_widget_show(gtkconv->toolbar); | |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4231 else |
| 11581 | 4232 gtk_widget_hide(gtkconv->toolbar); |
| 4233 | |
| 12188 | 4234 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), |
| 4235 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")); | |
|
11603
b97545f21b4c
[gaim-migrate @ 13874]
Gary Kramlich <grim@reaperworld.com>
parents:
11602
diff
changeset
|
4236 gtk_imhtml_set_protocol_name(GTK_IMHTML(gtkconv->imhtml), |
|
b97545f21b4c
[gaim-migrate @ 13874]
Gary Kramlich <grim@reaperworld.com>
parents:
11602
diff
changeset
|
4237 gaim_account_get_protocol_name(conv->account)); |
| 11581 | 4238 |
| 4239 g_signal_connect_swapped(G_OBJECT(pane), "focus", | |
| 4240 G_CALLBACK(gtk_widget_grab_focus), | |
| 4241 gtkconv->entry); | |
| 4242 | |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4243 if (hidden) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4244 gaim_gtk_conv_window_add_gtkconv(hidden_convwin, gtkconv); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4245 else |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4246 gaim_gtkconv_placement_place(gtkconv); |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
4247 |
|
12346
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
4248 if (nick_colors == NULL) |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
4249 nick_colors = generate_nick_colors(NUM_NICK_COLORS, gtk_widget_get_style(gtkconv->imhtml)->base[GTK_STATE_NORMAL]); |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4250 } |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4251 |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4252 static void |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4253 gaim_gtkconv_new_hidden(GaimConversation *conv) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4254 { |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4255 private_gtkconv_new(conv, TRUE); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4256 } |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4257 |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4258 void |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4259 gaim_gtkconv_new(GaimConversation *conv) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4260 { |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4261 private_gtkconv_new(conv, FALSE); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4262 } |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4263 |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4264 static void |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4265 received_im_msg_cb(GaimAccount *account, char *sender, char *message, |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4266 GaimConversation *conv, int flags) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4267 { |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4268 GaimConversationUiOps *ui_ops = gaim_gtk_conversations_get_conv_ui_ops(); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4269 if(conv) |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4270 return; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4271 |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4272 /* create hidden conv if hide_new pref is always */ |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4273 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/im/hide_new"), "always")==0) { |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4274 ui_ops->create_conversation = gaim_gtkconv_new_hidden; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4275 gaim_conversation_new(GAIM_CONV_TYPE_IM, account, sender); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4276 ui_ops->create_conversation = gaim_gtkconv_new; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4277 return; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4278 } |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4279 |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4280 /* create hidden conv if hide_new pref is away and account is away */ |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4281 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/im/hide_new"), "away")==0 |
| 12310 | 4282 && !gaim_status_is_available(gaim_account_get_active_status(account))) { |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4283 ui_ops->create_conversation = gaim_gtkconv_new_hidden; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4284 gaim_conversation_new(GAIM_CONV_TYPE_IM, account, sender); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4285 ui_ops->create_conversation = gaim_gtkconv_new; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4286 return; |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
4287 } |
| 11581 | 4288 } |
| 4289 | |
| 4359 | 4290 static void |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4291 gaim_gtkconv_destroy(GaimConversation *conv) |
| 4359 | 4292 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4293 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 4359 | 4294 |
| 10810 | 4295 gtkconv->convs = g_list_remove(gtkconv->convs, conv); |
| 4296 /* Don't destroy ourselves until all our convos are gone */ | |
| 4297 if (gtkconv->convs) | |
| 4298 return; | |
| 11508 | 4299 |
| 11581 | 4300 gaim_gtk_conv_window_remove_gtkconv(gtkconv->win, gtkconv); |
| 4301 | |
| 9504 | 4302 /* If the "Save Conversation" or "Save Icon" dialogs are open then close them */ |
| 4303 gaim_request_close_with_handle(conv); | |
| 4359 | 4304 |
|
4571
51e988d015ed
[gaim-migrate @ 4852]
Christian Hammond <chipx86@chipx86.com>
parents:
4561
diff
changeset
|
4305 gtk_widget_destroy(gtkconv->tab_cont); |
| 4892 | 4306 g_object_unref(gtkconv->tab_cont); |
|
4571
51e988d015ed
[gaim-migrate @ 4852]
Christian Hammond <chipx86@chipx86.com>
parents:
4561
diff
changeset
|
4307 |
| 11338 | 4308 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { |
| 4755 | 4309 if (gtkconv->u.im->icon_timer != 0) |
| 4310 g_source_remove(gtkconv->u.im->icon_timer); | |
| 4311 | |
| 4359 | 4312 if (gtkconv->u.im->anim != NULL) |
| 4793 | 4313 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); |
| 4359 | 4314 |
| 4315 g_free(gtkconv->u.im); | |
| 11581 | 4316 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4317 gaim_signals_disconnect_by_handle(gtkconv->u.chat); |
| 4359 | 4318 g_free(gtkconv->u.chat); |
| 4319 } | |
| 4320 | |
| 4633 | 4321 gtk_object_sink(GTK_OBJECT(gtkconv->tooltips)); |
| 4322 | |
| 4359 | 4323 g_free(gtkconv); |
| 4324 } | |
| 4325 | |
| 4326 static void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4327 gaim_gtkconv_write_im(GaimConversation *conv, const char *who, |
| 6982 | 4328 const char *message, GaimMessageFlags flags, |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4329 time_t mtime) |
| 4359 | 4330 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4331 GaimGtkConversation *gtkconv; |
| 4359 | 4332 |
| 4333 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
4334 gaim_gtkconv_set_active_conversation(conv); |
| 4359 | 4335 |
| 6982 | 4336 gaim_conversation_write(conv, who, message, flags, mtime); |
| 4359 | 4337 } |
| 4338 | |
| 4339 static void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4340 gaim_gtkconv_write_chat(GaimConversation *conv, const char *who, |
| 6621 | 4341 const char *message, GaimMessageFlags flags, time_t mtime) |
| 4359 | 4342 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4343 GaimGtkConversation *gtkconv; |
| 4359 | 4344 |
| 4345 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
4346 gaim_gtkconv_set_active_conversation(conv); |
| 4359 | 4347 |
| 10398 | 4348 flags |= GAIM_MESSAGE_COLORIZE; |
| 4359 | 4349 |
| 6982 | 4350 gaim_conversation_write(conv, who, message, flags, mtime); |
| 4359 | 4351 } |
| 4352 | |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4353 /* The callback for an event on a link tag. */ |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4354 static gboolean buddytag_event(GtkTextTag *tag, GObject *imhtml, |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4355 GdkEvent *event, GtkTextIter *arg2, gpointer data) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4356 if (event->type == GDK_BUTTON_PRESS |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4357 || event->type == GDK_2BUTTON_PRESS) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4358 GdkEventButton *btn_event = (GdkEventButton*) event; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4359 GaimConversation *conv = data; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4360 char *buddyname; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4361 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4362 /* strlen("BUDDY ") == 6 */ |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4363 g_return_val_if_fail((tag->name != NULL) |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4364 && (strlen(tag->name) > 6), FALSE); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4365 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4366 buddyname = (tag->name) + 6; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4367 |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4368 if (btn_event->button == 2 |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4369 && event->type == GDK_2BUTTON_PRESS) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4370 chat_do_info(GAIM_GTK_CONVERSATION(conv), buddyname); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4371 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4372 return TRUE; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4373 } else if (btn_event->button == 3 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4374 && event->type == GDK_BUTTON_PRESS) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4375 GtkTextIter start, end; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4376 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4377 /* we shouldn't display the popup |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4378 * if the user has selected something: */ |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4379 if (!gtk_text_buffer_get_selection_bounds( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4380 gtk_text_iter_get_buffer(arg2), |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4381 &start, &end)) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4382 GaimPluginProtocolInfo *prpl_info = NULL; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4383 GtkWidget *menu = NULL; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4384 GaimConnection *gc = |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4385 gaim_conversation_get_gc(conv); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4386 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4387 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4388 if (gc != NULL) |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4389 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4390 gc->prpl); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4391 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4392 menu = create_chat_menu(conv, buddyname, |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4393 prpl_info, gc); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4394 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4395 NULL, GTK_WIDGET(imhtml), |
|
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4396 btn_event->button, |
|
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4397 btn_event->time); |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4398 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4399 /* Don't propagate the event any further */ |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4400 return TRUE; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4401 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4402 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4403 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4404 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4405 return FALSE; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4406 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4407 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4408 static GtkTextTag *get_buddy_tag(GaimConversation *conv, const char *who) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4409 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4410 GtkTextTag *buddytag; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4411 /* strlen("BUDDY ") == 6 */ |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4412 gchar str[strlen(who) + 7]; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4413 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4414 g_snprintf(str, sizeof(str), "BUDDY %s", who); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4415 str[sizeof(str)] = '\0'; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4416 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4417 buddytag = gtk_text_tag_table_lookup( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4418 gtk_text_buffer_get_tag_table( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4419 GTK_IMHTML(gtkconv->imhtml)->text_buffer), str); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4420 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4421 if (buddytag == NULL) { |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4422 buddytag = gtk_text_buffer_create_tag( |
| 11096 | 4423 GTK_IMHTML(gtkconv->imhtml)->text_buffer, str, NULL); |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4424 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4425 g_signal_connect(G_OBJECT(buddytag), "event", |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4426 G_CALLBACK(buddytag_event), conv); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4427 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4428 |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4429 return buddytag; |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4430 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4431 |
| 4359 | 4432 static void |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4433 gaim_gtkconv_write_conv(GaimConversation *conv, const char *name, const char *alias, |
| 6982 | 4434 const char *message, GaimMessageFlags flags, |
| 4359 | 4435 time_t mtime) |
| 4436 { | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4437 GaimGtkConversation *gtkconv; |
| 11581 | 4438 GaimGtkWindow *win; |
|
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5551
diff
changeset
|
4439 GaimConnection *gc; |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4440 GaimAccount *account; |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4441 GaimPluginProtocolInfo *prpl_info; |
| 4359 | 4442 int gtk_font_options = 0; |
| 12553 | 4443 int gtk_font_options_all = 0; |
|
11224
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4444 int max_scrollback_lines = gaim_prefs_get_int( |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4445 "/gaim/gtk/conversations/scrollback_lines"); |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4446 int line_count; |
| 4359 | 4447 char buf2[BUF_LONG]; |
| 4448 char mdate[64]; | |
| 4449 char color[10]; | |
| 4450 char *str; | |
| 4451 char *with_font_tag; | |
| 4896 | 4452 char *sml_attrib = NULL; |
|
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4453 size_t length; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4454 GaimConversationType type; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4455 char *displaying; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4456 gboolean plugin_return; |
| 4895 | 4457 |
| 4359 | 4458 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 11581 | 4459 |
| 12553 | 4460 if(gaim_prefs_get_bool("/gaim/gtk/conversations/use_smooth_scrolling")) |
| 4461 gtk_font_options_all |= GTK_IMHTML_USE_SMOOTHSCROLLING; | |
| 4462 | |
| 11581 | 4463 /* Set the active conversation to the one that just messaged us. */ |
| 4464 /* TODO: consider not doing this if the account is offline or something */ | |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
4465 gaim_gtkconv_set_active_conversation(conv); |
|
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4466 type = gaim_conversation_get_type(conv); |
| 11581 | 4467 |
| 4359 | 4468 gc = gaim_conversation_get_gc(conv); |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4469 account = gaim_conversation_get_account(conv); |
|
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4470 |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4471 displaying = g_strdup(message); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4472 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1( |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4473 gaim_gtk_conversations_get_handle(), (type == GAIM_CONV_TYPE_IM ? |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4474 "displaying-im-msg" : "displaying-chat-msg"), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4475 account, conv, &displaying, flags)); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4476 if (plugin_return) |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4477 { |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4478 g_free(displaying); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4479 return; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4480 } |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4481 message = displaying; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4482 length = strlen(message) + 1; |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4483 |
| 11581 | 4484 win = gtkconv->win; |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4485 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4486 |
|
11224
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4487 line_count = gtk_text_buffer_get_line_count( |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4488 gtk_text_view_get_buffer(GTK_TEXT_VIEW( |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4489 gtkconv->imhtml))); |
|
11227
8b3d1b2c2c43
[gaim-migrate @ 13365]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11224
diff
changeset
|
4490 |
|
11224
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4491 /* 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
|
4492 max scrollback, trim down to max scrollback */ |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4493 if (max_scrollback_lines > 0 |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4494 && line_count > (max_scrollback_lines + 100)) { |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4495 GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4496 GTK_TEXT_VIEW(gtkconv->imhtml)); |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4497 GtkTextIter start, end; |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4498 |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4499 gtk_text_buffer_get_start_iter(text_buffer, &start); |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4500 gtk_text_buffer_get_iter_at_line(text_buffer, &end, |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4501 (line_count - max_scrollback_lines)); |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4502 gtk_imhtml_delete(GTK_IMHTML(gtkconv->imhtml), &start, &end); |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4503 } |
|
409d6a11da51
[gaim-migrate @ 13360]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11209
diff
changeset
|
4504 |
| 8677 | 4505 if (gtk_text_buffer_get_char_count(gtk_text_view_get_buffer(GTK_TEXT_VIEW(gtkconv->imhtml)))) |
| 12553 | 4506 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), "<BR>", gtk_font_options_all); |
| 8677 | 4507 |
| 5133 | 4508 if(time(NULL) > mtime + 20*60) /* show date if older than 20 minutes */ |
| 4509 strftime(mdate, sizeof(mdate), "%Y-%m-%d %H:%M:%S", localtime(&mtime)); | |
| 4510 else | |
| 4511 strftime(mdate, sizeof(mdate), "%H:%M:%S", localtime(&mtime)); | |
| 4359 | 4512 |
| 4896 | 4513 if(gc) |
| 9699 | 4514 sml_attrib = g_strdup_printf("sml=\"%s\"", |
| 4515 gaim_account_get_protocol_name(conv->account)); | |
| 7440 | 4516 |
| 10503 | 4517 gtk_font_options |= GTK_IMHTML_NO_COMMENTS; |
| 4359 | 4518 |
|
12064
658623020748
[gaim-migrate @ 14359]
Richard Laager <rlaager@wiktel.com>
parents:
12061
diff
changeset
|
4519 if ((flags & GAIM_MESSAGE_RECV) && |
|
658623020748
[gaim-migrate @ 14359]
Richard Laager <rlaager@wiktel.com>
parents:
12061
diff
changeset
|
4520 !gaim_prefs_get_bool("/gaim/gtk/conversations/show_incoming_formatting")) |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4521 gtk_font_options |= GTK_IMHTML_NO_COLOURS | GTK_IMHTML_NO_FONTS | GTK_IMHTML_NO_SIZES | GTK_IMHTML_NO_FORMATTING; |
| 4359 | 4522 |
| 7956 | 4523 /* this is gonna crash one day, I can feel it. */ |
| 4524 if (GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(gaim_account_get_protocol_id(conv->account)))->options & | |
| 7431 | 4525 OPT_PROTO_USE_POINTSIZE) { |
| 10503 | 4526 gtk_font_options |= GTK_IMHTML_USE_POINTSIZE; |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
4527 } |
| 4359 | 4528 |
| 12553 | 4529 |
| 10737 | 4530 /* TODO: These colors should not be hardcoded so log.c can use them */ |
| 6621 | 4531 if (flags & GAIM_MESSAGE_SYSTEM) { |
| 4359 | 4532 g_snprintf(buf2, sizeof(buf2), |
| 8690 | 4533 "<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
|
4534 sml_attrib ? sml_attrib : "", mdate, message); |
| 7440 | 4535 |
| 12553 | 4536 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, gtk_font_options_all); |
| 7440 | 4537 |
| 8722 | 4538 } else if (flags & GAIM_MESSAGE_ERROR) { |
| 4539 g_snprintf(buf2, sizeof(buf2), | |
| 9627 | 4540 "<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
|
4541 sml_attrib ? sml_attrib : "", mdate, message); |
| 9554 | 4542 |
| 12553 | 4543 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, gtk_font_options_all); |
| 8962 | 4544 |
| 7431 | 4545 } else if (flags & GAIM_MESSAGE_NO_LOG) { |
| 10884 | 4546 g_snprintf(buf2, BUF_LONG, |
| 8690 | 4547 "<B><FONT %s COLOR=\"#777777\">%s</FONT></B>", |
|
10854
bdd72261ec8c
[gaim-migrate @ 12529]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10849
diff
changeset
|
4548 sml_attrib ? sml_attrib : "", message); |
| 7440 | 4549 |
| 12553 | 4550 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, gtk_font_options_all); |
| 10346 | 4551 } else if (flags & GAIM_MESSAGE_RAW) { |
| 12553 | 4552 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), message, gtk_font_options_all); |
| 10346 | 4553 } else { |
| 4895 | 4554 char *new_message = g_memdup(message, length); |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4555 char *alias_escaped = (alias ? g_markup_escape_text(alias, strlen(alias)) : g_strdup("")); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4556 /* The initial offset is to deal with |
|
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4557 * escaped entities making the string longer */ |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4558 int tag_start_offset = alias ? (strlen(alias_escaped) - strlen(alias)) : 0; |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4559 int tag_end_offset = 0; |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4560 GtkSmileyTree *tree = NULL; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4561 GHashTable *smiley_data = NULL; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4562 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4563 if (flags & GAIM_MESSAGE_SEND) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4564 { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4565 /* Temporarily revert to the original smiley-data to avoid showing up |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4566 * custom smileys of the buddy when sending message |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4567 */ |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4568 tree = GTK_IMHTML(gtkconv->imhtml)->default_smilies; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4569 GTK_IMHTML(gtkconv->imhtml)->default_smilies = |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4570 GTK_IMHTML(gtkconv->entry)->default_smilies; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4571 smiley_data = GTK_IMHTML(gtkconv->imhtml)->smiley_data; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4572 GTK_IMHTML(gtkconv->imhtml)->smiley_data = GTK_IMHTML(gtkconv->entry)->smiley_data; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4573 } |
| 7440 | 4574 |
| 6621 | 4575 if (flags & GAIM_MESSAGE_WHISPER) { |
| 4359 | 4576 str = g_malloc(1024); |
| 7440 | 4577 |
| 4359 | 4578 /* If we're whispering, it's not an autoresponse. */ |
| 10504 | 4579 if (gaim_message_meify(new_message, -1 )) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4580 g_snprintf(str, 1024, "***%s", alias_escaped); |
| 4359 | 4581 strcpy(color, "#6C2585"); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4582 tag_start_offset += 3; |
| 4359 | 4583 } |
| 4584 else { | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4585 g_snprintf(str, 1024, "*%s*:", alias_escaped); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4586 tag_start_offset += 1; |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4587 tag_end_offset = 2; |
| 4359 | 4588 strcpy(color, "#00FF00"); |
| 4589 } | |
| 7440 | 4590 } |
| 4359 | 4591 else { |
| 10504 | 4592 if (gaim_message_meify(new_message, -1)) { |
| 4359 | 4593 str = g_malloc(1024); |
| 7440 | 4594 |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4595 if (flags & GAIM_MESSAGE_AUTO_RESP) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4596 g_snprintf(str, 1024, "%s ***%s", AUTO_RESPONSE, alias_escaped); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4597 tag_start_offset += 4 |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4598 + strlen(AUTO_RESPONSE); |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4599 } else { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4600 g_snprintf(str, 1024, "***%s", alias_escaped); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4601 tag_start_offset += 3; |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4602 } |
| 7440 | 4603 |
| 6621 | 4604 if (flags & GAIM_MESSAGE_NICK) |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
4605 strcpy(color, HIGHLIGHT_COLOR); |
| 4359 | 4606 else |
| 4607 strcpy(color, "#062585"); | |
| 4608 } | |
| 4609 else { | |
| 4610 str = g_malloc(1024); | |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4611 if (flags & GAIM_MESSAGE_AUTO_RESP) { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4612 g_snprintf(str, 1024, "%s %s", alias_escaped, AUTO_RESPONSE); |
|
10999
56cfc50d2a81
[gaim-migrate @ 12841]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10971
diff
changeset
|
4613 tag_start_offset += 1 |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4614 + strlen(AUTO_RESPONSE); |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4615 } else { |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4616 g_snprintf(str, 1024, "%s:", alias_escaped); |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4617 tag_end_offset = 1; |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4618 } |
| 6621 | 4619 if (flags & GAIM_MESSAGE_NICK) |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
4620 strcpy(color, HIGHLIGHT_COLOR); |
| 6621 | 4621 else if (flags & GAIM_MESSAGE_RECV) { |
| 10108 | 4622 if (flags & GAIM_MESSAGE_COLORIZE) { |
|
12579
5e81ae0736c9
[gaim-migrate @ 14904]
Richard Laager <rlaager@wiktel.com>
parents:
12553
diff
changeset
|
4623 GdkColor *col = get_nick_color(gtkconv, name); |
| 10346 | 4624 |
| 10108 | 4625 g_snprintf(color, sizeof(color), "#%02X%02X%02X", |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4626 col->red >> 8, col->green >> 8, col->blue >> 8); |
| 10108 | 4627 } else |
| 7854 | 4628 strcpy(color, RECV_COLOR); |
| 4359 | 4629 } |
| 6621 | 4630 else if (flags & GAIM_MESSAGE_SEND) |
| 7854 | 4631 strcpy(color, SEND_COLOR); |
| 10892 | 4632 else { |
| 4633 gaim_debug_error("gtkconv", "message missing flags\n"); | |
| 4634 strcpy(color, "#000000"); | |
| 4635 } | |
| 4359 | 4636 } |
| 4637 } | |
| 10892 | 4638 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4639 if(alias_escaped) |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4640 g_free(alias_escaped); |
| 11508 | 4641 |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4642 /* Are we in a chat where we can tell which users are buddies? */ |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4643 if (!(prpl_info->options & OPT_PROTO_UNIQUE_CHATNAME) && |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4644 gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4645 |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4646 /* Bold buddies to make them stand out from non-buddies. */ |
| 11581 | 4647 if (flags & GAIM_MESSAGE_SEND || |
|
11530
2a13cfe607b5
[gaim-migrate @ 13779]
Richard Laager <rlaager@wiktel.com>
parents:
11525
diff
changeset
|
4648 flags & GAIM_MESSAGE_NICK || |
|
2a13cfe607b5
[gaim-migrate @ 13779]
Richard Laager <rlaager@wiktel.com>
parents:
11525
diff
changeset
|
4649 gaim_find_buddy(account, name) != NULL) { |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4650 g_snprintf(buf2, BUF_LONG, |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4651 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>" |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4652 "<B>%s</B></FONT> ", |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4653 color, sml_attrib ? sml_attrib : "", mdate, str); |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4654 } else { |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4655 g_snprintf(buf2, BUF_LONG, |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4656 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>" |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4657 "%s</FONT> ", |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4658 color, sml_attrib ? sml_attrib : "", mdate, str); |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4659 |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4660 } |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4661 } else { |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4662 /* Bold everyone's name to make the name stand out from the message. */ |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4663 g_snprintf(buf2, BUF_LONG, |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4664 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>" |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4665 "<B>%s</B></FONT> ", |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4666 color, sml_attrib ? sml_attrib : "", mdate, str); |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4667 } |
| 7440 | 4668 |
| 12553 | 4669 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), buf2, gtk_font_options_all); |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4670 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4671 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT && |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4672 !(flags & GAIM_MESSAGE_SEND)) { |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4673 |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4674 GtkTextIter start, end; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4675 GtkTextTag *buddytag = get_buddy_tag(conv, name); |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4676 |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4677 gtk_text_buffer_get_end_iter( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4678 GTK_IMHTML(gtkconv->imhtml)->text_buffer, |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4679 &end); |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4680 gtk_text_iter_backward_chars(&end, |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4681 tag_end_offset + 1); |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4682 |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4683 gtk_text_buffer_get_end_iter( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4684 GTK_IMHTML(gtkconv->imhtml)->text_buffer, |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4685 &start); |
|
10964
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4686 gtk_text_iter_backward_chars(&start, |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4687 strlen(str) + 1 - tag_start_offset); |
|
aae07c7e23a3
[gaim-migrate @ 12771]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10961
diff
changeset
|
4688 |
|
10961
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4689 gtk_text_buffer_apply_tag( |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4690 GTK_IMHTML(gtkconv->imhtml)->text_buffer, |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4691 buddytag, &start, &end); |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4692 } |
|
42769b481935
[gaim-migrate @ 12764]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10953
diff
changeset
|
4693 |
| 4359 | 4694 g_free(str); |
| 4695 | |
| 4895 | 4696 if(gc){ |
| 4896 | 4697 char *pre = g_strdup_printf("<font %s>", sml_attrib ? sml_attrib : ""); |
| 4895 | 4698 char *post = "</font>"; |
| 4699 int pre_len = strlen(pre); | |
| 4700 int post_len = strlen(post); | |
| 7440 | 4701 |
| 4895 | 4702 with_font_tag = g_malloc(length + pre_len + post_len + 1); |
| 7440 | 4703 |
| 4895 | 4704 strcpy(with_font_tag, pre); |
| 4705 memcpy(with_font_tag + pre_len, new_message, length); | |
| 4706 strcpy(with_font_tag + pre_len + length, post); | |
| 7440 | 4707 |
| 4895 | 4708 length += pre_len + post_len; |
| 4709 g_free(pre); | |
| 4710 } | |
| 4608 | 4711 else |
| 4895 | 4712 with_font_tag = g_memdup(new_message, length); |
| 7440 | 4713 |
| 8962 | 4714 gtk_imhtml_append_text(GTK_IMHTML(gtkconv->imhtml), |
| 12553 | 4715 with_font_tag, gtk_font_options | gtk_font_options_all); |
| 7440 | 4716 |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4717 if (flags & GAIM_MESSAGE_SEND) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4718 { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4719 /* Restore the smiley-data */ |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4720 GTK_IMHTML(gtkconv->imhtml)->default_smilies = tree; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4721 GTK_IMHTML(gtkconv->imhtml)->smiley_data = smiley_data; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4722 } |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
4723 |
| 7440 | 4724 g_free(with_font_tag); |
| 7447 | 4725 g_free(new_message); |
| 7440 | 4726 } |
| 4727 | |
| 5012 | 4728 if(sml_attrib) |
| 4729 g_free(sml_attrib); | |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4730 |
|
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4731 gaim_signal_emit(gaim_gtk_conversations_get_handle(), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4732 (type == GAIM_CONV_TYPE_IM ? "displayed-im-msg" : "displayed-chat-msg"), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4733 account, conv, message, flags); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4734 g_free(displaying); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
4735 |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4736 /* Tab highlighting stuff */ |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4737 if (!gaim_gtkconv_has_focus(conv)) |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4738 { |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4739 GaimUnseenState unseen = GAIM_UNSEEN_NONE; |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4740 |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
4741 if ((flags & GAIM_MESSAGE_NICK) == GAIM_MESSAGE_NICK) |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4742 unseen = GAIM_UNSEEN_NICK; |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
4743 else if (((flags & GAIM_MESSAGE_SYSTEM) == GAIM_MESSAGE_SYSTEM) || |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
4744 ((flags & GAIM_MESSAGE_ERROR) == GAIM_MESSAGE_ERROR)) |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4745 unseen = GAIM_UNSEEN_EVENT; |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
4746 else if ((flags & GAIM_MESSAGE_NO_LOG) == GAIM_MESSAGE_NO_LOG) |
|
12132
95bffda9b762
[gaim-migrate @ 14432]
Richard Laager <rlaager@wiktel.com>
parents:
12131
diff
changeset
|
4747 unseen = GAIM_UNSEEN_NO_LOG; |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4748 else |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4749 unseen = GAIM_UNSEEN_TEXT; |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4750 |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4751 gtkconv_set_unseen(gtkconv, unseen); |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
4752 } |
| 4359 | 4753 } |
| 4754 | |
| 4755 static void | |
|
12463
b1717befbb26
[gaim-migrate @ 14773]
Richard Laager <rlaager@wiktel.com>
parents:
12455
diff
changeset
|
4756 gaim_gtkconv_chat_add_users(GaimConversation *conv, GList *users, GList *flags, GList *aliases, gboolean new_arrivals) |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4757 { |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4758 GaimConvChat *chat; |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4759 GaimGtkConversation *gtkconv; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4760 GaimGtkChatPane *gtkchat; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4761 GList *l; |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4762 GList *ll; |
| 11869 | 4763 GList *lll; |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4764 char tmp[BUF_LONG]; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4765 int num_users; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4766 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4767 chat = GAIM_CONV_CHAT(conv); |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4768 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4769 gtkchat = gtkconv->u.chat; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4770 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4771 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
|
4772 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4773 g_snprintf(tmp, sizeof(tmp), |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4774 ngettext("%d person in room", "%d people in room", |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4775 num_users), |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4776 num_users); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4777 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4778 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4779 |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4780 l = users; |
| 11869 | 4781 ll = flags; |
| 4782 lll = aliases; | |
| 4783 while (l != NULL && ll != NULL && lll != NULL) { | |
| 4784 add_chat_buddy_common(conv, (const char *)l->data, GPOINTER_TO_INT(ll->data), (const char *)lll->data, NULL); | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4785 l = l->next; |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4786 ll = ll->next; |
| 11869 | 4787 lll = lll->next; |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4788 } |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4789 } |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4790 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4791 static void |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4792 gaim_gtkconv_chat_rename_user(GaimConversation *conv, const char *old_name, |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4793 const char *new_name, const char *new_alias) |
| 4359 | 4794 { |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4795 GaimConvChat *chat; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4796 GaimGtkConversation *gtkconv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4797 GaimGtkChatPane *gtkchat; |
| 11869 | 4798 GaimConvChatBuddyFlags flags; |
| 4359 | 4799 GtkTreeIter iter; |
| 4800 GtkTreeModel *model; | |
| 4801 int f = 1; | |
| 4802 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4803 chat = GAIM_CONV_CHAT(conv); |
| 4359 | 4804 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 4805 gtkchat = gtkconv->u.chat; | |
| 4806 | |
| 9554 | 4807 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
| 4808 | |
| 4809 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
| 4810 return; | |
| 4811 | |
| 4812 while (f != 0) { | |
| 4813 char *val; | |
| 4814 | |
| 11869 | 4815 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, CHAT_USERS_FLAGS_COLUMN, &flags, -1); |
| 9554 | 4816 |
| 4817 if (!gaim_utf8_strcasecmp(old_name, val)) { | |
| 4818 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
| 4819 g_free(val); | |
| 4359 | 4820 break; |
| 4821 } | |
| 9554 | 4822 |
| 4823 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
| 4824 | |
| 4825 g_free(val); | |
| 4359 | 4826 } |
| 4827 | |
| 9554 | 4828 if (!gaim_conv_chat_find_user(chat, old_name)) |
| 4359 | 4829 return; |
| 4830 | |
|
11485
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4831 g_return_if_fail(new_alias != NULL); |
|
16b0da1f376f
[gaim-migrate @ 13727]
Richard Laager <rlaager@wiktel.com>
parents:
11480
diff
changeset
|
4832 |
| 11869 | 4833 add_chat_buddy_common(conv, new_name, flags, new_alias, old_name); |
| 4359 | 4834 } |
| 4835 | |
| 4836 static void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4837 gaim_gtkconv_chat_remove_user(GaimConversation *conv, const char *user) |
| 4359 | 4838 { |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4839 GaimConvChat *chat; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4840 GaimGtkConversation *gtkconv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
4841 GaimGtkChatPane *gtkchat; |
| 4359 | 4842 GtkTreeIter iter; |
| 4843 GtkTreeModel *model; | |
| 4844 char tmp[BUF_LONG]; | |
| 4845 int num_users; | |
| 4846 int f = 1; | |
| 4847 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4848 chat = GAIM_CONV_CHAT(conv); |
| 4359 | 4849 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 4850 gtkchat = gtkconv->u.chat; | |
| 4851 | |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4852 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
|
4853 |
| 9554 | 4854 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
| 4855 | |
| 4856 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
| 4857 return; | |
| 4858 | |
| 4859 while (f != 0) { | |
| 4860 char *val; | |
| 4861 | |
| 4862 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); | |
| 4863 | |
| 4864 if (!gaim_utf8_strcasecmp(user, val)) { | |
| 4865 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
| 4866 g_free(val); | |
| 4359 | 4867 break; |
| 4868 } | |
| 9554 | 4869 |
| 4870 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
| 4871 | |
| 4872 g_free(val); | |
| 4359 | 4873 } |
| 4874 | |
| 9554 | 4875 if (!gaim_conv_chat_find_user(chat, user)) |
| 4359 | 4876 return; |
| 4877 | |
| 4878 g_snprintf(tmp, sizeof(tmp), | |
| 9554 | 4879 ngettext("%d person in room", "%d people in room", |
| 4880 num_users), num_users); | |
| 4359 | 4881 |
| 4882 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); | |
| 4883 | |
| 4884 } | |
| 4885 | |
| 4886 static void | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4887 gaim_gtkconv_chat_remove_users(GaimConversation *conv, GList *users) |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4888 { |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4889 GaimConvChat *chat; |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4890 GaimGtkConversation *gtkconv; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4891 GaimGtkChatPane *gtkchat; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4892 GtkTreeIter iter; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4893 GtkTreeModel *model; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4894 GList *l; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4895 char tmp[BUF_LONG]; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4896 int num_users; |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
4897 gboolean f; |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4898 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4899 chat = GAIM_CONV_CHAT(conv); |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4900 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4901 gtkchat = gtkconv->u.chat; |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4902 |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
4903 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
|
4904 g_list_length(users); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4905 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4906 for (l = users; l != NULL; l = l->next) { |
| 9554 | 4907 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); |
| 4908 | |
|
10812
d087e928ffd1
[gaim-migrate @ 12465]
Luke Schierer <lschiere@pidgin.im>
parents:
10810
diff
changeset
|
4909 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) |
| 9554 | 4910 continue; |
| 4911 | |
| 4912 do { | |
| 4913 char *val; | |
| 4914 | |
| 4915 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, | |
| 4916 CHAT_USERS_NAME_COLUMN, &val, -1); | |
| 4917 | |
| 9696 | 4918 if (!gaim_utf8_strcasecmp((char *)l->data, val)) { |
| 4919 #if GTK_CHECK_VERSION(2,2,0) | |
| 9554 | 4920 f = gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
| 9696 | 4921 #else |
| 4922 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); | |
| 4923 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
| 4924 #endif | |
| 4925 } | |
| 9554 | 4926 else |
| 4927 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
| 4928 | |
| 4929 g_free(val); | |
| 4930 } while (f); | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4931 } |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4932 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4933 g_snprintf(tmp, sizeof(tmp), |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4934 ngettext("%d person in room", "%d people in room", |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4935 num_users), num_users); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4936 |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4937 gtk_label_set_text(GTK_LABEL(gtkchat->count), tmp); |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4938 } |
|
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
4939 |
| 9554 | 4940 static void |
| 4941 gaim_gtkconv_chat_update_user(GaimConversation *conv, const char *user) | |
| 4942 { | |
| 4943 GaimConvChat *chat; | |
| 11869 | 4944 GaimConvChatBuddyFlags flags; |
| 9554 | 4945 GaimGtkConversation *gtkconv; |
| 4946 GaimGtkChatPane *gtkchat; | |
| 4947 GtkTreeIter iter; | |
| 4948 GtkTreeModel *model; | |
| 4949 int f = 1; | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4950 char *alias = NULL; |
| 9554 | 4951 |
| 4952 chat = GAIM_CONV_CHAT(conv); | |
| 4953 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 4954 gtkchat = gtkconv->u.chat; | |
| 4955 | |
| 4956 model = gtk_tree_view_get_model(GTK_TREE_VIEW(gtkchat->list)); | |
| 4957 | |
| 4958 if (!gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model), &iter)) | |
| 4959 return; | |
| 4960 | |
| 4961 while (f != 0) { | |
| 4962 char *val; | |
| 4963 | |
| 4964 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &val, -1); | |
| 4965 | |
| 4966 if (!gaim_utf8_strcasecmp(user, val)) { | |
|
11500
9fc7d0153332
[gaim-migrate @ 13745]
Richard Laager <rlaager@wiktel.com>
parents:
11486
diff
changeset
|
4967 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_ALIAS_COLUMN, &alias, -1); |
| 9554 | 4968 gtk_list_store_remove(GTK_LIST_STORE(model), &iter); |
| 4969 g_free(val); | |
| 4970 break; | |
| 4971 } | |
| 4972 | |
| 4973 f = gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter); | |
| 4974 | |
| 4975 g_free(val); | |
| 4976 } | |
| 4977 | |
| 4978 if (!gaim_conv_chat_find_user(chat, user)) | |
| 4979 return; | |
| 4980 | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4981 g_return_if_fail(alias != NULL); |
|
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4982 |
| 11869 | 4983 flags = gaim_conv_chat_user_get_flags(chat, user); |
| 4984 | |
| 4985 add_chat_buddy_common(conv, user, flags, alias, NULL); | |
|
11454
201617d49573
[gaim-migrate @ 13693]
Richard Laager <rlaager@wiktel.com>
parents:
11453
diff
changeset
|
4986 g_free(alias); |
| 9554 | 4987 } |
| 4988 | |
| 11581 | 4989 gboolean |
|
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4990 gaim_gtkconv_has_focus(GaimConversation *conv) |
|
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4991 { |
| 11581 | 4992 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 4993 GaimGtkWindow *win; | |
|
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4994 gboolean has_focus; |
|
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4995 |
| 11581 | 4996 win = gtkconv->win; |
| 4997 | |
| 4998 g_object_get(G_OBJECT(win->window), "has-toplevel-focus", &has_focus, NULL); | |
|
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
4999 |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5000 if (has_focus && gaim_gtk_conv_window_is_active_conversation(conv)) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5001 return TRUE; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5002 |
|
11684
c1906dc6257c
[gaim-migrate @ 13970]
Luke Schierer <lschiere@pidgin.im>
parents:
11672
diff
changeset
|
5003 return FALSE; |
|
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5004 } |
|
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5005 |
| 12335 | 5006 static void gaim_gtkconv_custom_smiley_allocated(GdkPixbufLoader *loader, gpointer user_data) |
| 5007 { | |
| 5008 GtkIMHtmlSmiley *smiley; | |
| 5009 | |
| 5010 smiley = (GtkIMHtmlSmiley *)user_data; | |
| 5011 smiley->icon = gdk_pixbuf_loader_get_animation(loader); | |
| 5012 | |
| 5013 if (smiley->icon) | |
| 5014 g_object_ref(G_OBJECT(smiley->icon)); | |
| 5015 #ifdef DEBUG_CUSTOM_SMILEY | |
| 5016 gaim_debug_info("custom-smiley", "%s(): got GdkPixbufAnimation %p for smiley '%s'\n", __FUNCTION__, smiley->icon, smiley->smile); | |
| 5017 #endif | |
| 5018 } | |
| 5019 | |
| 5020 static void gaim_gtkconv_custom_smiley_closed(GdkPixbufLoader *loader, gpointer user_data) | |
| 5021 { | |
| 5022 GtkIMHtmlSmiley *smiley; | |
| 5023 GtkWidget *icon = NULL; | |
| 5024 GtkTextChildAnchor *anchor = NULL; | |
| 5025 GSList *current = NULL; | |
| 5026 | |
| 5027 smiley = (GtkIMHtmlSmiley *)user_data; | |
| 5028 if (!smiley->imhtml) { | |
| 5029 #ifdef DEBUG_CUSTOM_SMILEY | |
| 5030 gaim_debug_error("custom-smiley", "%s(): orphan smiley found: %p\n", __FUNCTION__, smiley); | |
| 5031 #endif | |
| 5032 g_object_unref(G_OBJECT(loader)); | |
| 5033 smiley->loader = NULL; | |
| 5034 return; | |
| 5035 } | |
| 5036 | |
| 5037 for (current = smiley->anchors; current; current = g_slist_next(current)) { | |
| 5038 | |
| 5039 icon = gtk_image_new_from_animation(smiley->icon); | |
| 5040 | |
| 5041 #ifdef DEBUG_CUSTOM_SMILEY | |
| 5042 gaim_debug_info("custom-smiley", "%s(): got GtkImage %p from GtkPixbufAnimation %p for smiley '%s'\n", | |
| 5043 __FUNCTION__, icon, smiley->icon, smiley->smile); | |
| 5044 #endif | |
| 5045 if (icon) { | |
| 5046 gtk_widget_show(icon); | |
| 5047 | |
| 5048 anchor = GTK_TEXT_CHILD_ANCHOR(current->data); | |
| 5049 | |
| 5050 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_plaintext", g_strdup(gaim_unescape_html(smiley->smile)), g_free); | |
| 5051 g_object_set_data_full(G_OBJECT(anchor), "gtkimhtml_htmltext", g_strdup(smiley->smile), g_free); | |
| 5052 | |
| 5053 if (smiley->imhtml) | |
| 5054 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(smiley->imhtml), icon, anchor); | |
| 5055 } | |
| 5056 | |
| 5057 } | |
| 5058 | |
| 5059 g_slist_free(smiley->anchors); | |
| 5060 smiley->anchors = NULL; | |
| 5061 | |
| 5062 g_object_unref(G_OBJECT(loader)); | |
| 5063 smiley->loader = NULL; | |
| 5064 } | |
| 5065 | |
| 10526 | 5066 static gboolean |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5067 add_custom_smiley_for_imhtml(GtkIMHtml *imhtml, const char *sml, const char *smile) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5068 { |
| 10526 | 5069 GtkIMHtmlSmiley *smiley; |
| 5070 GdkPixbufLoader *loader; | |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5071 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5072 smiley = gtk_imhtml_smiley_get(imhtml, sml, smile); |
| 10526 | 5073 |
| 5074 if (smiley) { | |
| 11525 | 5075 |
| 5076 if (!(smiley->flags & GTK_IMHTML_SMILEY_CUSTOM)) { | |
| 5077 return FALSE; | |
| 5078 } | |
| 5079 | |
| 5080 /* Close the old GdkPixbufAnimation, then create a new one for | |
| 5081 * the smiley we are about to receive */ | |
| 5082 g_object_unref(G_OBJECT(smiley->icon)); | |
| 5083 | |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5084 /* XXX: Is it necessary to _unref the loader first? */ |
| 11525 | 5085 smiley->loader = gdk_pixbuf_loader_new(); |
| 12335 | 5086 smiley->icon = NULL; |
| 5087 | |
| 5088 g_signal_connect(smiley->loader, "area_prepared", G_CALLBACK(gaim_gtkconv_custom_smiley_allocated), smiley); | |
| 5089 g_signal_connect(smiley->loader, "closed", G_CALLBACK(gaim_gtkconv_custom_smiley_closed), smiley); | |
| 5090 | |
| 11525 | 5091 return TRUE; |
| 10526 | 5092 } |
| 5093 | |
| 5094 loader = gdk_pixbuf_loader_new(); | |
| 5095 | |
| 5096 /* this is wrong, this file ought not call g_new on GtkIMHtmlSmiley */ | |
| 5097 /* 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
|
5098 GtkIMHtmlSmiley by opaque */ |
| 10526 | 5099 smiley = g_new0(GtkIMHtmlSmiley, 1); |
| 5100 smiley->file = NULL; | |
| 5101 smiley->smile = g_strdup(smile); | |
| 5102 smiley->loader = loader; | |
| 11525 | 5103 smiley->flags = smiley->flags | GTK_IMHTML_SMILEY_CUSTOM; |
| 10526 | 5104 |
| 12335 | 5105 g_signal_connect(smiley->loader, "area_prepared", G_CALLBACK(gaim_gtkconv_custom_smiley_allocated), smiley); |
| 5106 g_signal_connect(smiley->loader, "closed", G_CALLBACK(gaim_gtkconv_custom_smiley_closed), smiley); | |
| 11525 | 5107 |
|
12618
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5108 gtk_imhtml_associate_smiley(imhtml, sml, smiley); |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5109 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5110 return TRUE; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5111 } |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5112 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5113 static gboolean |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5114 gaim_gtkconv_custom_smiley_add(GaimConversation *conv, const char *smile, gboolean remote) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5115 { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5116 GaimGtkConversation *gtkconv; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5117 struct smiley_list *list; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5118 const char *sml = NULL, *conv_sml; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5119 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5120 if (!conv || !smile || !*smile) { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5121 return FALSE; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5122 } |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5123 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5124 /* If smileys are off, return false */ |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5125 if (gaim_gtkthemes_smileys_disabled()) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5126 return FALSE; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5127 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5128 /* If possible add this smiley to the current theme. |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5129 * The addition is only temporary: custom smilies aren't saved to disk. */ |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5130 conv_sml = gaim_account_get_protocol_name(conv->account); |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5131 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5132 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5133 for (list = (struct smiley_list *)current_smiley_theme->list; list; list = list->next) { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5134 if (!strcmp(list->sml, conv_sml)) { |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5135 sml = list->sml; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5136 break; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5137 } |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5138 } |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5139 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5140 if (!add_custom_smiley_for_imhtml(GTK_IMHTML(gtkconv->imhtml), sml, smile)) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5141 return FALSE; |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5142 |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5143 if (!remote) /* If it's a local custom smiley, then add it for the entry */ |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5144 if (!add_custom_smiley_for_imhtml(GTK_IMHTML(gtkconv->entry), sml, smile)) |
|
204bd8fac61f
[gaim-migrate @ 14954]
Richard Laager <rlaager@wiktel.com>
parents:
12616
diff
changeset
|
5145 return FALSE; |
| 10537 | 5146 |
| 10526 | 5147 return TRUE; |
| 5148 } | |
| 5149 | |
| 10537 | 5150 static void |
| 10526 | 5151 gaim_gtkconv_custom_smiley_write(GaimConversation *conv, const char *smile, |
| 11137 | 5152 const guchar *data, gsize size) |
| 10526 | 5153 { |
| 5154 GaimGtkConversation *gtkconv; | |
| 5155 GtkIMHtmlSmiley *smiley; | |
| 10537 | 5156 GdkPixbufLoader *loader; |
| 10526 | 5157 const char *sml; |
| 5158 | |
| 5159 sml = gaim_account_get_protocol_name(conv->account); | |
| 5160 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 5161 smiley = gtk_imhtml_smiley_get(GTK_IMHTML(gtkconv->imhtml), sml, smile); | |
| 5162 | |
| 10537 | 5163 if (!smiley) |
| 10526 | 5164 return; |
| 10537 | 5165 |
| 10526 | 5166 loader = smiley->loader; |
| 10537 | 5167 if (!loader) |
| 10526 | 5168 return; |
| 5169 | |
| 5170 gdk_pixbuf_loader_write(loader, data, size, NULL); | |
| 5171 } | |
| 5172 | |
| 5173 static void | |
| 5174 gaim_gtkconv_custom_smiley_close(GaimConversation *conv, const char *smile) | |
| 5175 { | |
| 5176 GaimGtkConversation *gtkconv; | |
| 5177 GtkIMHtmlSmiley *smiley; | |
| 5178 GdkPixbufLoader *loader; | |
| 5179 const char *sml; | |
| 5180 | |
| 5181 g_return_if_fail(conv != NULL); | |
| 5182 g_return_if_fail(smile != NULL); | |
| 5183 | |
| 5184 sml = gaim_account_get_protocol_name(conv->account); | |
| 5185 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 5186 smiley = gtk_imhtml_smiley_get(GTK_IMHTML(gtkconv->imhtml), sml, smile); | |
| 5187 | |
| 10537 | 5188 if (!smiley) |
| 10526 | 5189 return; |
| 5190 | |
| 5191 loader = smiley->loader; | |
| 5192 | |
| 10537 | 5193 if (!loader) |
| 10526 | 5194 return; |
| 10537 | 5195 |
| 12335 | 5196 |
| 11525 | 5197 |
| 10526 | 5198 gaim_debug_info("gtkconv", "About to close the smiley pixbuf\n"); |
| 5199 | |
| 5200 gdk_pixbuf_loader_close(loader, NULL); | |
| 12335 | 5201 |
| 10526 | 5202 } |
| 5203 | |
| 11581 | 5204 /* |
| 5205 * Makes sure all the menu items and all the buttons are hidden/shown and | |
| 5206 * sensitive/insensitive. This is called after changing tabs and when an | |
| 5207 * account signs on or off. | |
| 5208 */ | |
| 5209 static void | |
| 5210 gray_stuff_out(GaimGtkConversation *gtkconv) | |
| 5211 { | |
| 5212 GaimGtkWindow *win; | |
| 5213 GaimConversation *conv = gtkconv->active_conv; | |
| 5214 GaimConnection *gc; | |
| 5215 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 5216 GdkPixbuf *window_icon = NULL; | |
| 5217 GtkIMHtmlButtons buttons; | |
| 5218 GaimAccount *account; | |
| 5219 | |
| 5220 win = gaim_gtkconv_get_window(gtkconv); | |
| 5221 gc = gaim_conversation_get_gc(conv); | |
| 5222 account = gaim_conversation_get_account(conv); | |
| 5223 | |
| 5224 if (gc != NULL) | |
| 5225 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | |
| 5226 | |
| 11594 | 5227 if (win->menu.send_to != NULL) |
| 11734 | 5228 update_send_to_selection(win); |
| 11581 | 5229 |
| 5230 /* | |
| 5231 * Handle hiding and showing stuff based on what type of conv this is. | |
| 5232 * Stuff that Gaim IMs support in general should be shown for IM | |
| 5233 * conversations. Stuff that Gaim chats support in general should be | |
| 5234 * shown for chat conversations. It doesn't matter whether the PRPL | |
| 5235 * supports it or not--that only affects if the button or menu item | |
| 5236 * is sensitive or not. | |
| 5237 */ | |
| 5238 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) { | |
| 5239 /* Show stuff that applies to IMs, hide stuff that applies to chats */ | |
| 5240 | |
| 5241 /* Deal with menu items */ | |
| 5242 gtk_widget_show(win->menu.view_log); | |
| 5243 gtk_widget_show(win->menu.send_file); | |
| 5244 gtk_widget_show(win->menu.add_pounce); | |
| 5245 gtk_widget_show(win->menu.get_info); | |
| 5246 gtk_widget_hide(win->menu.invite); | |
| 5247 gtk_widget_show(win->menu.alias); | |
| 5248 gtk_widget_show(win->menu.block); | |
| 5249 | |
| 5250 if (gaim_find_buddy(account, gaim_conversation_get_name(conv)) == NULL) { | |
| 5251 gtk_widget_show(win->menu.add); | |
| 5252 gtk_widget_hide(win->menu.remove); | |
| 5253 } else { | |
| 5254 gtk_widget_show(win->menu.remove); | |
| 5255 gtk_widget_hide(win->menu.add); | |
| 5256 } | |
| 5257 | |
| 5258 gtk_widget_show(win->menu.insert_link); | |
| 5259 gtk_widget_show(win->menu.insert_image); | |
| 5260 gtk_widget_show(win->menu.show_icon); | |
| 5261 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) { | |
| 5262 /* Show stuff that applies to Chats, hide stuff that applies to IMs */ | |
| 5263 | |
| 5264 /* Deal with menu items */ | |
| 5265 gtk_widget_show(win->menu.view_log); | |
| 5266 gtk_widget_hide(win->menu.send_file); | |
| 5267 gtk_widget_hide(win->menu.add_pounce); | |
| 5268 gtk_widget_hide(win->menu.get_info); | |
| 5269 gtk_widget_show(win->menu.invite); | |
| 5270 gtk_widget_show(win->menu.alias); | |
| 5271 gtk_widget_hide(win->menu.block); | |
| 5272 gtk_widget_hide(win->menu.show_icon); | |
| 5273 | |
| 5274 if (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) == NULL) { | |
| 5275 /* If the chat is NOT in the buddy list */ | |
| 5276 gtk_widget_show(win->menu.add); | |
| 5277 gtk_widget_hide(win->menu.remove); | |
| 5278 } else { | |
| 5279 /* If the chat IS in the buddy list */ | |
| 5280 gtk_widget_hide(win->menu.add); | |
| 5281 gtk_widget_show(win->menu.remove); | |
| 5282 } | |
| 5283 | |
| 5284 gtk_widget_show(win->menu.insert_link); | |
| 5285 gtk_widget_hide(win->menu.insert_image); | |
| 5286 } | |
| 5287 | |
| 5288 /* | |
| 5289 * Handle graying stuff out based on whether an account is connected | |
| 5290 * and what features that account supports. | |
| 5291 */ | |
| 5292 if ((gc != NULL) && | |
| 12012 | 5293 ((gaim_conversation_get_type(conv) != GAIM_CONV_TYPE_CHAT) || |
| 5294 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) | |
| 5295 { | |
| 11581 | 5296 /* Account is online */ |
| 5297 /* Deal with the toolbar */ | |
| 12012 | 5298 if (conv->features & GAIM_CONNECTION_HTML) |
| 5299 { | |
| 5300 buttons = GTK_IMHTML_ALL; /* Everything on */ | |
| 5301 if (conv->features & GAIM_CONNECTION_NO_BGCOLOR) | |
| 5302 buttons &= ~GTK_IMHTML_BACKCOLOR; | |
| 5303 if (conv->features & GAIM_CONNECTION_NO_FONTSIZE) | |
| 5304 { | |
| 5305 buttons &= ~GTK_IMHTML_GROW; | |
| 5306 buttons &= ~GTK_IMHTML_SHRINK; | |
| 5307 } | |
| 5308 if (conv->features & GAIM_CONNECTION_NO_URLDESC) | |
| 5309 buttons &= ~GTK_IMHTML_LINKDESC; | |
| 5310 } else { | |
| 12216 | 5311 buttons = GTK_IMHTML_SMILEY | GTK_IMHTML_IMAGE; |
| 12012 | 5312 } |
| 12216 | 5313 |
| 5314 if (!(prpl_info->options & OPT_PROTO_IM_IMAGE) || | |
| 5315 conv->features & GAIM_CONNECTION_NO_IMAGES) | |
| 5316 buttons &= ~GTK_IMHTML_IMAGE; | |
| 5317 | |
| 12012 | 5318 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); |
| 5319 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gaim_account_get_protocol_id(account)); | |
| 11581 | 5320 |
| 5321 /* Deal with menu items */ | |
| 12012 | 5322 gtk_widget_set_sensitive(win->menu.view_log, TRUE); |
| 5323 gtk_widget_set_sensitive(win->menu.add_pounce, TRUE); | |
| 5324 gtk_widget_set_sensitive(win->menu.get_info, (prpl_info->get_info != NULL)); | |
| 5325 gtk_widget_set_sensitive(win->menu.invite, (prpl_info->chat_invite != NULL)); | |
| 5326 gtk_widget_set_sensitive(win->menu.block, (prpl_info->add_deny != NULL)); | |
| 5327 gtk_widget_set_sensitive(win->menu.insert_link, (conv->features & GAIM_CONNECTION_HTML)); | |
| 12099 | 5328 gtk_widget_set_sensitive(win->menu.insert_image, (prpl_info->options & OPT_PROTO_IM_IMAGE) && !(conv->features & GAIM_CONNECTION_NO_IMAGES)); |
| 12012 | 5329 |
| 5330 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) | |
| 5331 { | |
| 5332 gtk_widget_set_sensitive(win->menu.add, (prpl_info->add_buddy != NULL)); | |
| 5333 gtk_widget_set_sensitive(win->menu.remove, (prpl_info->remove_buddy != NULL)); | |
| 5334 gtk_widget_set_sensitive(win->menu.send_file, | |
| 5335 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file || | |
| 5336 prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv))))); | |
| 5337 gtk_widget_set_sensitive(win->menu.alias, | |
| 5338 (gaim_find_buddy(account, gaim_conversation_get_name(conv)) != NULL)); | |
| 5339 } | |
| 5340 else if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) | |
| 5341 { | |
| 5342 gtk_widget_set_sensitive(win->menu.add, (prpl_info->join_chat != NULL)); | |
| 5343 gtk_widget_set_sensitive(win->menu.remove, (prpl_info->join_chat != NULL)); | |
| 5344 gtk_widget_set_sensitive(win->menu.alias, | |
| 5345 (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) != NULL)); | |
| 5346 } | |
| 11581 | 5347 |
| 5348 /* Deal with chat userlist buttons */ | |
| 12012 | 5349 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 5350 { | |
| 5351 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_im, TRUE); | |
| 5352 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_ignore, TRUE); | |
| 5353 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_info, (prpl_info->get_info != NULL)); | |
| 5354 } | |
| 5355 } else { | |
| 11581 | 5356 /* Account is offline */ |
| 5357 /* Or it's a chat that we've left. */ | |
| 5358 | |
| 5359 /* Then deal with menu items */ | |
| 12012 | 5360 gtk_widget_set_sensitive(win->menu.view_log, TRUE); |
| 5361 gtk_widget_set_sensitive(win->menu.send_file, FALSE); | |
| 5362 gtk_widget_set_sensitive(win->menu.add_pounce, TRUE); | |
| 5363 gtk_widget_set_sensitive(win->menu.get_info, FALSE); | |
| 5364 gtk_widget_set_sensitive(win->menu.invite, FALSE); | |
| 5365 gtk_widget_set_sensitive(win->menu.alias, FALSE); | |
| 5366 gtk_widget_set_sensitive(win->menu.block, FALSE); | |
| 5367 gtk_widget_set_sensitive(win->menu.add, FALSE); | |
| 5368 gtk_widget_set_sensitive(win->menu.remove, FALSE); | |
| 5369 gtk_widget_set_sensitive(win->menu.insert_link, TRUE); | |
| 5370 gtk_widget_set_sensitive(win->menu.insert_image, FALSE); | |
| 11581 | 5371 |
| 5372 /* Deal with chat userlist buttons */ | |
| 12012 | 5373 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 5374 { | |
| 5375 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_im, FALSE); | |
| 5376 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_ignore, FALSE); | |
| 5377 gtk_widget_set_sensitive(gtkconv->u.chat->userlist_info, FALSE); | |
| 5378 } | |
| 5379 } | |
| 11581 | 5380 |
| 5381 /* | |
| 5382 * Update the window's icon | |
| 5383 */ | |
| 12171 | 5384 if (gaim_gtk_conv_window_is_active_conversation(conv)) |
| 11581 | 5385 { |
| 12171 | 5386 if ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) && |
| 5387 (gtkconv->u.im->anim)) | |
| 5388 { | |
| 5389 window_icon = | |
| 5390 gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | |
| 5391 g_object_ref(window_icon); | |
| 5392 } else { | |
| 5393 window_icon = gaim_gtkconv_get_tab_icon(conv, FALSE); | |
| 5394 } | |
| 5395 gtk_window_set_icon(GTK_WINDOW(win->window), window_icon); | |
| 5396 if (window_icon != NULL) | |
| 5397 g_object_unref(G_OBJECT(window_icon)); | |
| 5398 } | |
| 11581 | 5399 } |
| 5400 | |
| 10526 | 5401 |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5402 static void |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5403 gaim_gtkconv_updated(GaimConversation *conv, GaimConvUpdateType type) |
| 4359 | 5404 { |
| 11581 | 5405 GaimGtkWindow *win; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5406 GaimGtkConversation *gtkconv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5407 GaimGtkChatPane *gtkchat; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5408 GaimConvChat *chat; |
| 4359 | 5409 |
| 10116 | 5410 g_return_if_fail(conv != NULL); |
| 5411 | |
| 4359 | 5412 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 11581 | 5413 win = gtkconv->win; |
| 10810 | 5414 conv = gtkconv->active_conv; /* Gross hack */ |
| 11581 | 5415 /* Maybe we should just ignore it if conv != gtkconv->active_conv, |
| 5416 * instead of the gross hack? | |
| 5417 */ | |
| 4359 | 5418 |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5419 if (type == GAIM_CONV_UPDATE_ACCOUNT) |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5420 { |
| 4359 | 5421 gaim_conversation_autoset_title(conv); |
|
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5422 |
| 11338 | 5423 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
|
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5424 gaim_gtkconv_update_buddy_icon(conv); |
|
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5425 |
| 4359 | 5426 gaim_gtkconv_update_buttons_by_protocol(conv); |
| 5427 | |
| 11734 | 5428 update_send_to_selection(win); |
| 4359 | 5429 |
| 11525 | 5430 gaim_gtkthemes_smiley_themeize(gtkconv->imhtml); |
| 6394 | 5431 |
| 6395 | 5432 update_tab_icon(conv); |
| 4359 | 5433 } |
| 5434 else if (type == GAIM_CONV_UPDATE_TYPING || | |
|
8155
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5435 type == GAIM_CONV_UPDATE_UNSEEN || |
|
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5436 type == GAIM_CONV_UPDATE_TITLE) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5437 { |
| 9472 | 5438 char *title; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5439 GaimConvIm *im = NULL; |
|
12131
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
5440 GaimAccount *account = gaim_conversation_get_account(conv); |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5441 /* I think this is a little longer than it needs to be but I'm lazy. */ |
|
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5442 char style[51]; |
| 4736 | 5443 |
| 11338 | 5444 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5445 im = GAIM_CONV_IM(conv); |
| 4359 | 5446 |
|
12131
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
5447 if (!gaim_account_is_connected(account) |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
5448 || ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_CHAT) |
| 9472 | 5449 && gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)))) |
| 5450 title = g_strdup_printf("(%s)", gaim_conversation_get_title(conv)); | |
| 5451 else | |
| 5452 title = g_strdup(gaim_conversation_get_title(conv)); | |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5453 |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5454 *style = '\0'; |
| 4359 | 5455 |
| 5456 if (!GTK_WIDGET_REALIZED(gtkconv->tab_label)) | |
| 5457 gtk_widget_realize(gtkconv->tab_label); | |
| 5458 | |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5459 if (im != NULL && |
|
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5460 gaim_conv_im_get_typing_state(im) == GAIM_TYPING) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5461 { |
| 11759 | 5462 strncpy(style, "color=\"#47A046\"", sizeof(style)); |
| 4359 | 5463 } |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5464 else if (im != NULL && |
|
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5465 gaim_conv_im_get_typing_state(im) == GAIM_TYPED) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5466 { |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5467 strncpy(style, "color=\"#D1940C\"", sizeof(style)); |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5468 } |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
5469 else if (gtkconv->unseen_state == GAIM_UNSEEN_NICK) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5470 { |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5471 strncpy(style, "color=\"#0D4E91\" style=\"italic\" weight=\"bold\"", sizeof(style)); |
| 4359 | 5472 } |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
5473 else if (gtkconv->unseen_state == GAIM_UNSEEN_TEXT) |
| 8252 | 5474 { |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5475 strncpy(style, "color=\"#DF421E\" weight=\"bold\"", sizeof(style)); |
| 8252 | 5476 } |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
5477 else if (gtkconv->unseen_state == GAIM_UNSEEN_EVENT) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5478 { |
| 11758 | 5479 strncpy(style, "color=\"#868272\" style=\"italic\"", sizeof(style)); |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5480 } |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5481 |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5482 if (*style != '\0') |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5483 { |
| 8536 | 5484 char *html_title,*label; |
| 5485 | |
|
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10698
diff
changeset
|
5486 html_title = g_markup_escape_text(title, -1); |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5487 |
|
11737
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5488 label = g_strdup_printf("<span %s>%s</span>", |
|
3959c29f340f
[gaim-migrate @ 14028]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11734
diff
changeset
|
5489 style, html_title); |
| 8536 | 5490 g_free(html_title); |
|
7995
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5491 gtk_label_set_markup(GTK_LABEL(gtkconv->tab_label), label); |
|
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5492 g_free(label); |
| 4359 | 5493 } |
|
7995
87d3260f961a
[gaim-migrate @ 8672]
Christian Hammond <chipx86@chipx86.com>
parents:
7990
diff
changeset
|
5494 else |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5495 gtk_label_set_text(GTK_LABEL(gtkconv->tab_label), title); |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5496 |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5497 if (gaim_gtk_conv_window_is_active_conversation(conv)) |
| 10810 | 5498 update_typing_icon(gtkconv); |
|
8155
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5499 |
|
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5500 if (type == GAIM_CONV_UPDATE_TITLE) { |
|
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5501 gtk_label_set_text(GTK_LABEL(gtkconv->menu_label), title); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5502 if (gaim_gtk_conv_window_is_active_conversation(conv)) |
| 11581 | 5503 gtk_window_set_title(GTK_WINDOW(win->window), title); |
|
8155
77d1252b3803
[gaim-migrate @ 8867]
Christian Hammond <chipx86@chipx86.com>
parents:
8143
diff
changeset
|
5504 } |
| 9472 | 5505 |
| 5506 g_free(title); | |
| 4359 | 5507 } |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5508 else if (type == GAIM_CONV_UPDATE_TOPIC) |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5509 { |
| 7154 | 5510 const char *topic; |
|
7118
bf630f7dfdcd
[gaim-migrate @ 7685]
Christian Hammond <chipx86@chipx86.com>
parents:
7108
diff
changeset
|
5511 chat = GAIM_CONV_CHAT(conv); |
| 4359 | 5512 gtkchat = gtkconv->u.chat; |
| 5513 | |
| 7154 | 5514 topic = gaim_conv_chat_get_topic(chat); |
| 5515 | |
| 9554 | 5516 gtk_entry_set_text(GTK_ENTRY(gtkchat->topic_text), topic ? topic : ""); |
| 7154 | 5517 gtk_tooltips_set_tip(gtkconv->tooltips, gtkchat->topic_text, |
| 9554 | 5518 topic ? topic : "", NULL); |
| 4359 | 5519 } |
| 5520 else if (type == GAIM_CONV_ACCOUNT_ONLINE || | |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5521 type == GAIM_CONV_ACCOUNT_OFFLINE) |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5522 { |
| 11581 | 5523 gray_stuff_out(GAIM_GTK_CONVERSATION(gaim_gtk_conv_window_get_active_conversation(win))); |
| 11594 | 5524 generate_send_to_items(win); |
| 8946 | 5525 update_tab_icon(conv); |
| 9472 | 5526 gaim_conversation_autoset_title(conv); |
|
6392
e9974608b319
[gaim-migrate @ 6897]
Christian Hammond <chipx86@chipx86.com>
parents:
6371
diff
changeset
|
5527 } |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5528 else if (type == GAIM_CONV_UPDATE_AWAY) |
|
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5529 { |
| 8946 | 5530 update_tab_icon(conv); |
| 4359 | 5531 } |
|
8256
1d86096ae0f4
[gaim-migrate @ 8979]
Christian Hammond <chipx86@chipx86.com>
parents:
8253
diff
changeset
|
5532 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
|
5533 type == GAIM_CONV_UPDATE_CHATLEFT) |
|
8001
934f5df83b29
[gaim-migrate @ 8678]
Christian Hammond <chipx86@chipx86.com>
parents:
7996
diff
changeset
|
5534 { |
| 9472 | 5535 gaim_conversation_autoset_title(conv); |
| 10810 | 5536 gray_stuff_out(GAIM_GTK_CONVERSATION(conv)); |
|
4397
ce3a0eba91ef
[gaim-migrate @ 4666]
Christian Hammond <chipx86@chipx86.com>
parents:
4387
diff
changeset
|
5537 } |
|
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5538 else if (type == GAIM_CONV_UPDATE_ICON) |
|
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5539 { |
|
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5540 gaim_gtkconv_update_buddy_icon(conv); |
|
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5541 } |
| 10665 | 5542 else if (type == GAIM_CONV_UPDATE_FEATURES) |
| 5543 { | |
| 10810 | 5544 gray_stuff_out(GAIM_GTK_CONVERSATION(conv)); |
| 10665 | 5545 } |
| 4359 | 5546 } |
| 5547 | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5548 static GaimConversationUiOps conversation_ui_ops = |
| 4359 | 5549 { |
| 11581 | 5550 gaim_gtkconv_new, |
| 4359 | 5551 gaim_gtkconv_destroy, /* destroy_conversation */ |
| 5552 gaim_gtkconv_write_chat, /* write_chat */ | |
| 5553 gaim_gtkconv_write_im, /* write_im */ | |
| 5554 gaim_gtkconv_write_conv, /* write_conv */ | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5555 gaim_gtkconv_chat_add_users, /* chat_add_users */ |
| 4359 | 5556 gaim_gtkconv_chat_rename_user, /* chat_rename_user */ |
| 5557 gaim_gtkconv_chat_remove_user, /* chat_remove_user */ | |
|
6407
ba0b99a72be2
[gaim-migrate @ 6913]
Christian Hammond <chipx86@chipx86.com>
parents:
6405
diff
changeset
|
5558 gaim_gtkconv_chat_remove_users, /* chat_remove_users */ |
| 9554 | 5559 gaim_gtkconv_chat_update_user, /* chat_update_user */ |
|
12624
851b0bd7eb52
[gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents:
12618
diff
changeset
|
5560 gaim_gtkconv_present_conversation, /* present */ |
|
9260
947876140943
[gaim-migrate @ 10059]
Christian Hammond <chipx86@chipx86.com>
parents:
9247
diff
changeset
|
5561 gaim_gtkconv_has_focus, /* has_focus */ |
|
12624
851b0bd7eb52
[gaim-migrate @ 14960]
Christopher O'Brien <siege@pidgin.im>
parents:
12618
diff
changeset
|
5562 gaim_gtkconv_custom_smiley_add, /* custom_smiley_add */ |
| 10526 | 5563 gaim_gtkconv_custom_smiley_write, /* custom_smiley_write */ |
| 5564 gaim_gtkconv_custom_smiley_close, /* custom_smiley_close */ | |
| 4359 | 5565 gaim_gtkconv_updated /* updated */ |
| 5566 }; | |
| 5567 | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5568 GaimConversationUiOps * |
|
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
5569 gaim_gtk_conversations_get_conv_ui_ops(void) |
| 4359 | 5570 { |
|
4465
6e37eb000b7a
[gaim-migrate @ 4740]
Christian Hammond <chipx86@chipx86.com>
parents:
4454
diff
changeset
|
5571 return &conversation_ui_ops; |
| 4359 | 5572 } |
| 5573 | |
| 5574 /************************************************************************** | |
| 5575 * Public conversation utility functions | |
| 5576 **************************************************************************/ | |
| 5577 void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5578 gaim_gtkconv_update_buddy_icon(GaimConversation *conv) |
| 4359 | 5579 { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5580 GaimGtkConversation *gtkconv; |
| 11581 | 5581 GaimGtkWindow *win; |
| 4359 | 5582 |
| 10381 | 5583 GdkPixbufLoader *loader; |
| 5584 GdkPixbufAnimation *anim; | |
| 4359 | 5585 GError *err = NULL; |
| 5586 | |
|
6846
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5587 const void *data; |
|
8ab95f4c9800
[gaim-migrate @ 7391]
Christian Hammond <chipx86@chipx86.com>
parents:
6771
diff
changeset
|
5588 size_t len; |
| 4359 | 5589 |
| 5590 GdkPixbuf *buf; | |
| 5591 | |
| 5592 GtkWidget *event; | |
| 5593 GtkWidget *frame; | |
| 5594 GdkPixbuf *scale; | |
| 5595 GdkPixmap *pm; | |
| 5596 GdkBitmap *bm; | |
| 9318 | 5597 int scale_width, scale_height; |
| 5598 | |
| 5599 GaimAccount *account; | |
| 5600 GaimPluginProtocolInfo *prpl_info = NULL; | |
| 4359 | 5601 |
| 9324 | 5602 GaimBuddyIcon *icon; |
| 5603 | |
|
5678
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5604 g_return_if_fail(conv != NULL); |
|
619bca773b2e
[gaim-migrate @ 6096]
Christian Hammond <chipx86@chipx86.com>
parents:
5676
diff
changeset
|
5605 g_return_if_fail(GAIM_IS_GTK_CONVERSATION(conv)); |
| 11338 | 5606 g_return_if_fail(gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM); |
| 4359 | 5607 |
| 5608 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 11581 | 5609 win = gtkconv->win; |
| 10175 | 5610 |
| 9687 | 5611 if (!gtkconv->u.im->show_icon) |
| 5612 return; | |
| 5613 | |
| 9318 | 5614 account = gaim_conversation_get_account(conv); |
| 5615 if(account && account->gc) | |
| 5616 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(account->gc->prpl); | |
| 4359 | 5617 |
| 9845 | 5618 /* Remove the current icon stuff */ |
| 9885 | 5619 if (gtkconv->u.im->icon_container != NULL) |
| 5620 gtk_widget_destroy(gtkconv->u.im->icon_container); | |
| 5621 gtkconv->u.im->icon_container = NULL; | |
| 9845 | 5622 |
| 5623 if (gtkconv->u.im->anim != NULL) | |
| 5624 g_object_unref(G_OBJECT(gtkconv->u.im->anim)); | |
| 5625 | |
| 9887 | 5626 gtkconv->u.im->anim = NULL; |
| 5627 | |
| 9845 | 5628 if (gtkconv->u.im->icon_timer != 0) |
| 5629 g_source_remove(gtkconv->u.im->icon_timer); | |
| 5630 | |
| 5631 gtkconv->u.im->icon_timer = 0; | |
| 5632 | |
| 5633 if (gtkconv->u.im->iter != NULL) | |
| 5634 g_object_unref(G_OBJECT(gtkconv->u.im->iter)); | |
| 4359 | 5635 |
| 10116 | 5636 gtkconv->u.im->iter = NULL; |
| 5637 | |
|
5545
7a64114641c3
[gaim-migrate @ 5946]
Christian Hammond <chipx86@chipx86.com>
parents:
5484
diff
changeset
|
5638 if (!gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) |
| 4359 | 5639 return; |
| 5640 | |
| 5641 if (gaim_conversation_get_gc(conv) == NULL) | |
| 5642 return; | |
| 5643 | |
| 9324 | 5644 icon = gaim_conv_im_get_icon(GAIM_CONV_IM(conv)); |
| 5645 | |
| 5646 if (icon == NULL) | |
| 5647 return; | |
| 5648 | |
| 5649 data = gaim_buddy_icon_get_data(icon, &len); | |
| 5650 | |
| 10381 | 5651 loader = gdk_pixbuf_loader_new(); |
| 5652 gdk_pixbuf_loader_write(loader, data, len, NULL); | |
|
12601
e63fb8e9f4ac
[gaim-migrate @ 14935]
Richard Laager <rlaager@wiktel.com>
parents:
12600
diff
changeset
|
5653 gdk_pixbuf_loader_close(loader, &err); |
| 10381 | 5654 anim = gdk_pixbuf_loader_get_animation(loader); |
| 5655 if (anim) | |
| 5656 g_object_ref(G_OBJECT(anim)); | |
| 5657 g_object_unref(loader); | |
| 5658 | |
| 5659 if (!anim) | |
| 9324 | 5660 return; |
| 10381 | 5661 gtkconv->u.im->anim = anim; |
| 9324 | 5662 |
| 4359 | 5663 if (err) { |
|
5211
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
5664 gaim_debug(GAIM_DEBUG_ERROR, "gtkconv", |
|
0241d6b6702d
[gaim-migrate @ 5581]
Christian Hammond <chipx86@chipx86.com>
parents:
5205
diff
changeset
|
5665 "Buddy icon error: %s\n", err->message); |
| 4359 | 5666 g_error_free(err); |
| 5667 } | |
| 5668 | |
| 5669 if (!gtkconv->u.im->anim) | |
| 5670 return; | |
| 5671 | |
| 5672 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) { | |
| 5673 gtkconv->u.im->iter = NULL; | |
| 5674 buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | |
| 5675 } else { | |
| 5676 gtkconv->u.im->iter = | |
| 8496 | 5677 gdk_pixbuf_animation_get_iter(gtkconv->u.im->anim, NULL); /* LEAK */ |
| 4359 | 5678 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); |
| 8189 | 5679 if (gtkconv->u.im->animate) |
| 10810 | 5680 start_anim(NULL, gtkconv); |
| 4359 | 5681 } |
| 5682 | |
| 10483 | 5683 gaim_gtk_buddy_icon_get_scale_size(buf, prpl_info ? &prpl_info->icon_spec : |
| 9318 | 5684 NULL, &scale_width, &scale_height); |
| 4359 | 5685 scale = gdk_pixbuf_scale_simple(buf, |
| 9318 | 5686 MAX(gdk_pixbuf_get_width(buf) * scale_width / |
| 4359 | 5687 gdk_pixbuf_animation_get_width(gtkconv->u.im->anim), 1), |
| 9318 | 5688 MAX(gdk_pixbuf_get_height(buf) * scale_height / |
| 4359 | 5689 gdk_pixbuf_animation_get_height(gtkconv->u.im->anim), 1), |
| 11324 | 5690 GDK_INTERP_BILINEAR); |
| 4359 | 5691 |
| 5692 gdk_pixbuf_render_pixmap_and_mask(scale, &pm, &bm, 100); | |
| 4793 | 5693 g_object_unref(G_OBJECT(scale)); |
| 4359 | 5694 |
| 8821 | 5695 |
| 9885 | 5696 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); |
| 8821 | 5697 |
| 4359 | 5698 frame = gtk_frame_new(NULL); |
| 5699 gtk_frame_set_shadow_type(GTK_FRAME(frame), | |
| 5700 (bm ? GTK_SHADOW_NONE : GTK_SHADOW_IN)); | |
| 9885 | 5701 gtk_box_pack_start(GTK_BOX(gtkconv->u.im->icon_container), frame, |
| 5702 FALSE, FALSE, 0); | |
| 8821 | 5703 |
| 4359 | 5704 event = gtk_event_box_new(); |
| 5705 gtk_container_add(GTK_CONTAINER(frame), event); | |
|
5314
1f901484599d
[gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents:
5228
diff
changeset
|
5706 g_signal_connect(G_OBJECT(event), "button-press-event", |
|
10883
b0fdadf463d4
[gaim-migrate @ 12581]
Gary Kramlich <grim@reaperworld.com>
parents:
10879
diff
changeset
|
5707 G_CALLBACK(icon_menu), gtkconv); |
| 4359 | 5708 gtk_widget_show(event); |
| 5709 | |
| 4635 | 5710 gtkconv->u.im->icon = gtk_image_new_from_pixmap(pm, bm); |
| 9318 | 5711 gtk_widget_set_size_request(gtkconv->u.im->icon, scale_width, scale_height); |
| 4359 | 5712 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); |
| 5713 gtk_widget_show(gtkconv->u.im->icon); | |
| 5714 | |
| 4793 | 5715 g_object_unref(G_OBJECT(pm)); |
| 4359 | 5716 |
| 5717 if (bm) | |
| 4793 | 5718 g_object_unref(G_OBJECT(bm)); |
| 7143 | 5719 |
| 10356 | 5720 gtk_box_pack_start(GTK_BOX(gtkconv->lower_hbox), |
| 5721 gtkconv->u.im->icon_container, FALSE, FALSE, 0); | |
| 9332 | 5722 |
| 9885 | 5723 gtk_widget_show(gtkconv->u.im->icon_container); |
| 9332 | 5724 gtk_widget_show(frame); |
| 5725 | |
| 7143 | 5726 /* The buddy icon code needs badly to be fixed. */ |
| 5727 buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5728 if(gaim_gtk_conv_window_is_active_conversation(conv)) |
| 11581 | 5729 gtk_window_set_icon(GTK_WINDOW(win->window), buf); |
| 4359 | 5730 } |
| 5731 | |
| 5732 void | |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5733 gaim_gtkconv_update_buttons_by_protocol(GaimConversation *conv) |
| 4359 | 5734 { |
| 11581 | 5735 GaimGtkWindow *win; |
| 4359 | 5736 |
|
4398
a8249a5250b6
[gaim-migrate @ 4667]
Christian Hammond <chipx86@chipx86.com>
parents:
4397
diff
changeset
|
5737 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
| 4359 | 5738 return; |
| 5739 | |
| 11581 | 5740 win = GAIM_GTK_CONVERSATION(conv)->win; |
| 5741 | |
| 5742 if (win != NULL && gaim_gtk_conv_window_is_active_conversation(conv)) | |
| 10810 | 5743 gray_stuff_out(GAIM_GTK_CONVERSATION(conv)); |
| 4359 | 5744 } |
| 5745 | |
| 5746 int | |
| 11614 | 5747 gaim_gtkconv_get_tab_at_xy(GaimGtkWindow *win, int x, int y, gboolean *to_right) |
| 11581 | 5748 { |
| 4359 | 5749 gint nb_x, nb_y, x_rel, y_rel; |
| 5750 GtkNotebook *notebook; | |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5751 GtkWidget *page, *tab; |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5752 gint i, page_num = -1; |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5753 gint count; |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5754 gboolean horiz; |
| 4359 | 5755 |
| 11614 | 5756 if (to_right) |
| 5757 *to_right = FALSE; | |
| 5758 | |
| 11581 | 5759 notebook = GTK_NOTEBOOK(win->notebook); |
| 5760 | |
| 5761 gdk_window_get_origin(win->notebook->window, &nb_x, &nb_y); | |
| 4359 | 5762 x_rel = x - nb_x; |
| 5763 y_rel = y - nb_y; | |
| 5764 | |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5765 horiz = (gtk_notebook_get_tab_pos(notebook) == GTK_POS_TOP || |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5766 gtk_notebook_get_tab_pos(notebook) == GTK_POS_BOTTOM); |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5767 |
| 11780 | 5768 #if GTK_CHECK_VERSION(2,2,0) |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5769 count = gtk_notebook_get_n_pages(GTK_NOTEBOOK(notebook)); |
| 11780 | 5770 #else |
| 5771 /* this is hacky, but it's only for Gtk 2.0.0... */ | |
| 5772 count = g_list_length(GTK_NOTEBOOK(notebook)->children); | |
| 5773 #endif | |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5774 |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5775 for (i = 0; i < count; i++) { |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5776 |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5777 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), i); |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5778 tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page); |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5779 |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5780 if (horiz) { |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5781 if (x_rel >= tab->allocation.x - GAIM_HIG_BOX_SPACE && |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5782 x_rel <= tab->allocation.x + tab->allocation.width + GAIM_HIG_BOX_SPACE) { |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5783 page_num = i; |
| 11614 | 5784 |
| 5785 if (to_right && x_rel >= tab->allocation.x + tab->allocation.width/2) | |
| 5786 *to_right = TRUE; | |
| 5787 | |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5788 break; |
| 4359 | 5789 } |
|
11279
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5790 } else { |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5791 if (y_rel >= tab->allocation.y - GAIM_HIG_BOX_SPACE && |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5792 y_rel <= tab->allocation.y + tab->allocation.height + GAIM_HIG_BOX_SPACE) { |
|
ed5302df41b0
[gaim-migrate @ 13474]
Luke Schierer <lschiere@pidgin.im>
parents:
11276
diff
changeset
|
5793 page_num = i; |
| 11614 | 5794 |
| 5795 if (to_right && y_rel >= tab->allocation.y + tab->allocation.height/2) | |
| 5796 *to_right = TRUE; | |
| 5797 | |
| 4359 | 5798 break; |
| 5799 } | |
| 5800 } | |
| 5801 } | |
| 5802 | |
| 5803 return page_num; | |
| 5804 } | |
| 5805 | |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5806 static void |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5807 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
|
5808 gpointer data) |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5809 { |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5810 GList *l; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5811 GaimConversation *conv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5812 GaimGtkConversation *gtkconv; |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5813 |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5814 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5815 conv = (GaimConversation *)l->data; |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5816 |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5817 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5818 continue; |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5819 |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5820 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5821 |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5822 if (value) |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5823 gtk_widget_show(gtkconv->close); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5824 else |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5825 gtk_widget_hide(gtkconv->close); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5826 } |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5827 } |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
5828 |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5829 static void |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5830 spellcheck_pref_cb(const char *name, GaimPrefType type, gpointer value, |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5831 gpointer data) |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5832 { |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5833 #ifdef USE_GTKSPELL |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5834 GList *cl; |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5835 GaimConversation *conv; |
|
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5836 GaimGtkConversation *gtkconv; |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5837 GtkSpell *spell; |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5838 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5839 for (cl = gaim_get_conversations(); cl != NULL; cl = cl->next) { |
|
6725
e62a504c83d0
[gaim-migrate @ 7252]
Christian Hammond <chipx86@chipx86.com>
parents:
6695
diff
changeset
|
5840 |
|
5676
dae79aefac8d
[gaim-migrate @ 6094]
Christian Hammond <chipx86@chipx86.com>
parents:
5675
diff
changeset
|
5841 conv = (GaimConversation *)cl->data; |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5842 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5843 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5844 continue; |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5845 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5846 gtkconv = GAIM_GTK_CONVERSATION(conv); |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5847 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5848 if (value) |
|
12067
e859c1663a27
[gaim-migrate @ 14362]
Richard Laager <rlaager@wiktel.com>
parents:
12064
diff
changeset
|
5849 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(gtkconv->entry)); |
|
e859c1663a27
[gaim-migrate @ 14362]
Richard Laager <rlaager@wiktel.com>
parents:
12064
diff
changeset
|
5850 else { |
|
e859c1663a27
[gaim-migrate @ 14362]
Richard Laager <rlaager@wiktel.com>
parents:
12064
diff
changeset
|
5851 spell = gtkspell_get_from_text_view(GTK_TEXT_VIEW(gtkconv->entry)); |
|
e859c1663a27
[gaim-migrate @ 14362]
Richard Laager <rlaager@wiktel.com>
parents:
12064
diff
changeset
|
5852 gtkspell_detach(spell); |
|
e859c1663a27
[gaim-migrate @ 14362]
Richard Laager <rlaager@wiktel.com>
parents:
12064
diff
changeset
|
5853 } |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5854 } |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5855 #endif |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5856 } |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5857 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5858 static void |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5859 tab_side_pref_cb(const char *name, GaimPrefType type, gpointer value, |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5860 gpointer data) |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5861 { |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5862 GList *l; |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5863 GtkPositionType pos; |
| 11581 | 5864 GaimGtkWindow *win; |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5865 |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5866 pos = GPOINTER_TO_INT(value); |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5867 |
| 11581 | 5868 for (l = gaim_gtk_conv_windows_get_list(); l != NULL; l = l->next) { |
| 5869 win = l->data; | |
| 5870 | |
| 11619 | 5871 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win->notebook), pos&~8); |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5872 } |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5873 } |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5874 |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5875 static void |
| 12188 | 5876 show_timestamps_pref_cb(const char *name, GaimPrefType type, |
| 5877 gpointer value, gpointer data) | |
| 5878 { | |
| 5879 GList *l; | |
| 5880 GaimConversation *conv; | |
| 5881 GaimGtkConversation *gtkconv; | |
| 5882 GaimGtkWindow *win; | |
| 5883 | |
| 5884 for (l = gaim_get_conversations(); l != NULL; l = l->next) | |
| 5885 { | |
| 5886 conv = (GaimConversation *)l->data; | |
| 5887 | |
| 5888 if (!GAIM_IS_GTK_CONVERSATION(conv)) | |
| 5889 continue; | |
| 5890 | |
| 5891 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 5892 win = gtkconv->win; | |
| 5893 | |
| 5894 gtk_check_menu_item_set_active( | |
| 5895 GTK_CHECK_MENU_ITEM(win->menu.show_timestamps), | |
| 5896 (gboolean)GPOINTER_TO_INT(value)); | |
| 5897 | |
| 5898 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), | |
| 5899 (gboolean)GPOINTER_TO_INT(value)); | |
| 5900 } | |
| 5901 } | |
| 5902 | |
| 5903 static void | |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5904 show_formatting_toolbar_pref_cb(const char *name, GaimPrefType type, |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5905 gpointer value, gpointer data) |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5906 { |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5907 GList *l; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5908 GaimConversation *conv; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5909 GaimGtkConversation *gtkconv; |
| 11581 | 5910 GaimGtkWindow *win; |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5911 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5912 for (l = gaim_get_conversations(); l != NULL; l = l->next) |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5913 { |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5914 conv = (GaimConversation *)l->data; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5915 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5916 if (!GAIM_IS_GTK_CONVERSATION(conv)) |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5917 continue; |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5918 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5919 gtkconv = GAIM_GTK_CONVERSATION(conv); |
| 11581 | 5920 win = gtkconv->win; |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5921 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5922 gtk_check_menu_item_set_active( |
| 11581 | 5923 GTK_CHECK_MENU_ITEM(win->menu.show_formatting_toolbar), |
| 5924 (gboolean)GPOINTER_TO_INT(value)); | |
| 10377 | 5925 |
| 5926 if ((gboolean)GPOINTER_TO_INT(value)) | |
| 8317 | 5927 gtk_widget_show(gtkconv->toolbar); |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5928 else |
| 8317 | 5929 gtk_widget_hide(gtkconv->toolbar); |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5930 } |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5931 } |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5932 |
|
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
5933 static void |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5934 animate_buddy_icons_pref_cb(const char *name, GaimPrefType type, |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5935 gpointer value, gpointer data) |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5936 { |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5937 GList *l; |
| 8189 | 5938 GaimConversation *conv; |
| 5939 GaimGtkConversation *gtkconv; | |
| 11581 | 5940 GaimGtkWindow *win; |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5941 |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5942 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
|
5943 return; |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5944 |
| 8189 | 5945 /* Set the "animate" flag for each icon based on the new preference */ |
| 5946 for (l = gaim_get_ims(); l != NULL; l = l->next) { | |
| 5947 conv = (GaimConversation *)l->data; | |
| 5948 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 10112 | 5949 gtkconv->u.im->animate = GPOINTER_TO_INT(value); |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5950 } |
| 8189 | 5951 |
| 5952 /* Now either stop or start animation for the active conversation in each window */ | |
| 11581 | 5953 for (l = gaim_gtk_conv_windows_get_list(); l != NULL; l = l->next) { |
| 5954 win = l->data; | |
| 5955 conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 8189 | 5956 gaim_gtkconv_update_buddy_icon(conv); |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5957 } |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5958 } |
|
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
5959 |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5960 static void |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5961 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
|
5962 gpointer data) |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5963 { |
|
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5964 GList *l; |
|
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5965 |
|
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5966 for (l = gaim_get_conversations(); l != NULL; l = l->next) { |
|
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5967 GaimConversation *conv = l->data; |
|
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5968 |
| 11338 | 5969 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) |
| 12052 | 5970 gaim_gtkconv_update_buddy_icon(conv); |
|
5881
cc7870e1e3b3
[gaim-migrate @ 6313]
Christian Hammond <chipx86@chipx86.com>
parents:
5872
diff
changeset
|
5971 } |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5972 } |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
5973 |
|
5681
46d7ad0dfa26
[gaim-migrate @ 6100]
Christian Hammond <chipx86@chipx86.com>
parents:
5680
diff
changeset
|
5974 static void |
|
11936
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5975 conv_placement_usetabs_cb(const char *name, GaimPrefType type, |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5976 gpointer value, gpointer data) |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5977 { |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5978 gaim_prefs_trigger_callback("/gaim/gtk/conversations/placement"); |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5979 } |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5980 |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
5981 static void |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5982 account_status_changed_cb(GaimAccount *account, GaimStatus *oldstatus, |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5983 GaimStatus *newstatus) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5984 { |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5985 GList *l; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5986 GaimConversation *conv = NULL; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5987 GaimGtkConversation *gtkconv; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5988 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5989 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/im/hide_new"), "away")!=0) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5990 return; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5991 |
| 12310 | 5992 if(gaim_status_is_available(oldstatus) || !gaim_status_is_available(newstatus)) |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5993 return; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5994 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5995 for (l = hidden_convwin->gtkconvs; l != NULL; l = l->next) { |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5996 gtkconv = l->data; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5997 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5998 conv = gtkconv->active_conv; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
5999 |
| 12310 | 6000 if(!gaim_status_is_available( |
| 6001 gaim_account_get_active_status( | |
| 6002 gaim_conversation_get_account(conv)))) | |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6003 continue; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6004 |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
6005 gaim_gtk_conv_window_remove_gtkconv(hidden_convwin, gtkconv); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6006 gaim_gtkconv_placement_place(gtkconv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6007 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6008 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6009 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6010 static void |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6011 hide_new_pref_cb(const char *name, GaimPrefType type, gpointer value, |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6012 gpointer data) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6013 { |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6014 GList *l; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6015 GaimConversation *conv = NULL; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6016 GaimGtkConversation *gtkconv; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6017 gboolean when_away = FALSE; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6018 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6019 if(!hidden_convwin) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6020 return; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6021 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6022 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/im/hide_new"), "always")==0) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6023 return; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6024 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6025 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/im/hide_new"), "away")==0) |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6026 when_away = TRUE; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6027 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6028 for (l = hidden_convwin->gtkconvs; l != NULL; l = l->next) { |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6029 gtkconv = l->data; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6030 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6031 conv = gtkconv->active_conv; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6032 |
| 12310 | 6033 if(when_away && !gaim_status_is_available( |
| 6034 gaim_account_get_active_status( | |
| 6035 gaim_conversation_get_account(conv)))) | |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6036 continue; |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6037 |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
6038 gaim_gtk_conv_window_remove_gtkconv(hidden_convwin, gtkconv); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6039 gaim_gtkconv_placement_place(gtkconv); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6040 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6041 } |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6042 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6043 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6044 static void |
|
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6045 conv_placement_pref_cb(const char *name, GaimPrefType type, |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6046 gpointer value, gpointer data) |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6047 { |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6048 GaimConvPlacementFunc func; |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6049 |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6050 if (strcmp(name, "/gaim/gtk/conversations/placement")) |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6051 return; |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6052 |
| 11581 | 6053 func = gaim_gtkconv_placement_get_fnc(value); |
|
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6054 |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6055 if (func == NULL) |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6056 return; |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6057 |
| 11581 | 6058 gaim_gtkconv_placement_set_current_func(func); |
|
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6059 } |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6060 |
|
12131
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6061 static void |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6062 account_signed_off_cb(GaimConnection *gc, gpointer event) |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6063 { |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6064 GList *iter; |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6065 GaimAccount *account; |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6066 |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6067 account = gaim_connection_get_account(gc); |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6068 |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6069 for (iter = gaim_get_conversations(); iter; iter = iter->next) |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6070 { |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6071 GaimConversation *conv = iter->data; |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6072 |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6073 if (gaim_conversation_get_account(conv) == account) |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6074 gaim_conversation_update(conv, GPOINTER_TO_INT(event)); |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6075 } |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6076 } |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6077 |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6078 void * |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6079 gaim_gtk_conversations_get_handle(void) |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6080 { |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6081 static int handle; |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6082 |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6083 return &handle; |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6084 } |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6085 |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6086 void |
|
7035
feb3d21a7794
[gaim-migrate @ 7598]
Christian Hammond <chipx86@chipx86.com>
parents:
7008
diff
changeset
|
6087 gaim_gtk_conversations_init(void) |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6088 { |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6089 void *handle = gaim_gtk_conversations_get_handle(); |
|
11856
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6090 void *blist_handle = gaim_blist_get_handle(); |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6091 |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6092 /* Conversations */ |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6093 gaim_prefs_add_none("/gaim/gtk/conversations"); |
| 12553 | 6094 gaim_prefs_add_bool("/gaim/gtk/conversations/use_smooth_scrolling", TRUE); |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6095 gaim_prefs_add_bool("/gaim/gtk/conversations/close_on_tabs", TRUE); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6096 gaim_prefs_add_bool("/gaim/gtk/conversations/send_bold", FALSE); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6097 gaim_prefs_add_bool("/gaim/gtk/conversations/send_italic", FALSE); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6098 gaim_prefs_add_bool("/gaim/gtk/conversations/send_underline", FALSE); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6099 gaim_prefs_add_bool("/gaim/gtk/conversations/spellcheck", TRUE); |
|
11267
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
6100 gaim_prefs_add_bool("/gaim/gtk/conversations/show_incoming_formatting", TRUE); |
|
477e5cca8287
[gaim-migrate @ 13449]
Richard Laager <rlaager@wiktel.com>
parents:
11261
diff
changeset
|
6101 |
| 12264 | 6102 gaim_prefs_add_bool("/gaim/gtk/conversations/show_timestamps", TRUE); |
|
7326
00a9ab26d607
[gaim-migrate @ 7912]
Christian Hammond <chipx86@chipx86.com>
parents:
7322
diff
changeset
|
6103 gaim_prefs_add_bool("/gaim/gtk/conversations/show_formatting_toolbar", TRUE); |
| 9832 | 6104 gaim_prefs_add_bool("/gaim/gtk/conversations/passthrough_unknown_commands", FALSE); |
| 9130 | 6105 |
|
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6106 gaim_prefs_add_string("/gaim/gtk/conversations/placement", "last"); |
| 8998 | 6107 gaim_prefs_add_int("/gaim/gtk/conversations/placement_number", 1); |
| 9025 | 6108 gaim_prefs_add_string("/gaim/gtk/conversations/bgcolor", ""); |
| 6109 gaim_prefs_add_string("/gaim/gtk/conversations/fgcolor", ""); | |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6110 gaim_prefs_add_string("/gaim/gtk/conversations/font_face", ""); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6111 gaim_prefs_add_int("/gaim/gtk/conversations/font_size", 3); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6112 gaim_prefs_add_bool("/gaim/gtk/conversations/tabs", TRUE); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6113 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
|
6114 gaim_prefs_add_int("/gaim/gtk/conversations/scrollback_lines", 4000); |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6115 |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6116 /* Conversations -> Chat */ |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6117 gaim_prefs_add_none("/gaim/gtk/conversations/chat"); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6118 gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_width", 410); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6119 gaim_prefs_add_int("/gaim/gtk/conversations/chat/default_height", 160); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6120 gaim_prefs_add_int("/gaim/gtk/conversations/chat/entry_height", 50); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6121 |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6122 /* Conversations -> IM */ |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6123 gaim_prefs_add_none("/gaim/gtk/conversations/im"); |
| 9150 | 6124 |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6125 gaim_prefs_add_bool("/gaim/gtk/conversations/im/animate_buddy_icons", TRUE); |
| 9150 | 6126 |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6127 gaim_prefs_add_int("/gaim/gtk/conversations/im/default_width", 410); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6128 gaim_prefs_add_int("/gaim/gtk/conversations/im/default_height", 160); |
|
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6129 gaim_prefs_add_int("/gaim/gtk/conversations/im/entry_height", 50); |
| 9319 | 6130 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
|
6131 |
|
12616
eee2042ad4f4
[gaim-migrate @ 14952]
Richard Laager <rlaager@wiktel.com>
parents:
12604
diff
changeset
|
6132 gaim_prefs_add_string("/gaim/gtk/conversations/im/hide_new", "never"); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6133 |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6134 /* Connect callbacks. */ |
| 10087 | 6135 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
|
6136 close_on_tabs_pref_cb, NULL); |
| 12188 | 6137 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/show_timestamps", |
| 6138 show_timestamps_pref_cb, NULL); | |
| 10087 | 6139 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
|
6140 show_formatting_toolbar_pref_cb, NULL); |
| 10087 | 6141 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/spellcheck", |
|
5674
2d86a5fa6fef
[gaim-migrate @ 6092]
Christian Hammond <chipx86@chipx86.com>
parents:
5673
diff
changeset
|
6142 spellcheck_pref_cb, NULL); |
| 10087 | 6143 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/tab_side", |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6144 tab_side_pref_cb, NULL); |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6145 |
|
11936
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
6146 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/tabs", |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
6147 conv_placement_usetabs_cb, NULL); |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
6148 |
| 10087 | 6149 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/placement", |
|
11856
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6150 conv_placement_pref_cb, NULL); |
|
7561
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6151 gaim_prefs_trigger_callback("/gaim/gtk/conversations/placement"); |
|
cdfdbabd3266
[gaim-migrate @ 8175]
Christian Hammond <chipx86@chipx86.com>
parents:
7538
diff
changeset
|
6152 |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6153 /* IM callbacks */ |
| 10087 | 6154 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
|
6155 animate_buddy_icons_pref_cb, NULL); |
| 10087 | 6156 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
|
6157 show_buddy_icons_pref_cb, NULL); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6158 gaim_prefs_connect_callback(handle, "/gaim/gtk/conversations/im/hide_new", |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6159 hide_new_pref_cb, NULL); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6160 |
|
5675
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6161 |
|
17e345ffeddb
[gaim-migrate @ 6093]
Christian Hammond <chipx86@chipx86.com>
parents:
5674
diff
changeset
|
6162 |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6163 /********************************************************************** |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6164 * Register signals |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6165 **********************************************************************/ |
|
11447
ef6e94bdda08
[gaim-migrate @ 13686]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
11338
diff
changeset
|
6166 gaim_signal_register(handle, "conversation-dragging", |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6167 gaim_marshal_VOID__POINTER_POINTER, NULL, 2, |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6168 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6169 GAIM_SUBTYPE_CONV_WINDOW), |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6170 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6171 GAIM_SUBTYPE_CONV_WINDOW)); |
| 9167 | 6172 |
|
12604
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6173 gaim_signal_register(handle, "displaying-im-msg", |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6174 gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6175 gaim_value_new(GAIM_TYPE_BOOLEAN), 4, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6176 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6177 GAIM_SUBTYPE_ACCOUNT), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6178 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6179 GAIM_SUBTYPE_CONVERSATION), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6180 gaim_value_new_outgoing(GAIM_TYPE_STRING), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6181 gaim_value_new(G_TYPE_INT)); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6182 |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6183 gaim_signal_register(handle, "displayed-im-msg", |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6184 gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6185 NULL, 4, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6186 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6187 GAIM_SUBTYPE_ACCOUNT), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6188 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6189 GAIM_SUBTYPE_CONVERSATION), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6190 gaim_value_new(GAIM_TYPE_STRING), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6191 gaim_value_new(G_TYPE_INT)); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6192 |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6193 gaim_signal_register(handle, "displaying-chat-msg", |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6194 gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_UINT, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6195 gaim_value_new(GAIM_TYPE_BOOLEAN), 4, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6196 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6197 GAIM_SUBTYPE_ACCOUNT), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6198 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6199 GAIM_SUBTYPE_CONVERSATION), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6200 gaim_value_new_outgoing(GAIM_TYPE_STRING), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6201 gaim_value_new(G_TYPE_INT)); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6202 |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6203 gaim_signal_register(handle, "displayed-chat-msg", |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6204 gaim_marshal_VOID__POINTER_POINTER_POINTER_UINT, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6205 NULL, 4, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6206 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6207 GAIM_SUBTYPE_ACCOUNT), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6208 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6209 GAIM_SUBTYPE_CONVERSATION), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6210 gaim_value_new(GAIM_TYPE_STRING), |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6211 gaim_value_new(G_TYPE_INT)); |
|
71299d63801d
[gaim-migrate @ 14939]
Richard Laager <rlaager@wiktel.com>
parents:
12601
diff
changeset
|
6212 |
|
12639
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
6213 gaim_signal_register(handle, "conversation-switched", |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
6214 gaim_marshal_VOID__POINTER_POINTER, NULL, 1, |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
6215 gaim_value_new(GAIM_TYPE_SUBTYPE, |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
6216 GAIM_SUBTYPE_CONVERSATION)); |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
6217 |
| 9167 | 6218 /********************************************************************** |
| 6219 * Register commands | |
| 6220 **********************************************************************/ | |
| 9829 | 6221 gaim_cmd_register("say", "S", GAIM_CMD_P_DEFAULT, |
| 6222 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
| 6223 say_command_cb, _("say <message>: Send a message normally as if you weren't using a command."), NULL); | |
| 9213 | 6224 gaim_cmd_register("me", "S", GAIM_CMD_P_DEFAULT, |
| 6225 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
| 9597 | 6226 me_command_cb, _("me <action>: Send an IRC style action to a buddy or chat."), NULL); |
| 9213 | 6227 gaim_cmd_register("debug", "w", GAIM_CMD_P_DEFAULT, |
| 6228 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, | |
| 9597 | 6229 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
|
6230 gaim_cmd_register("clear", "", GAIM_CMD_P_DEFAULT, |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
6231 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM, NULL, |
|
dbc518c453f2
[gaim-migrate @ 13209]
Etan Reisner <pidgin@unreliablesource.net>
parents:
11137
diff
changeset
|
6232 clear_command_cb, _("clear: Clears the conversation scrollback."), NULL); |
| 9213 | 6233 gaim_cmd_register("help", "w", GAIM_CMD_P_DEFAULT, |
| 9597 | 6234 GAIM_CMD_FLAG_CHAT | GAIM_CMD_FLAG_IM | GAIM_CMD_FLAG_ALLOW_WRONG_ARGS, NULL, |
| 6235 help_command_cb, _("help <command>: Help on a specific command."), NULL); | |
| 11581 | 6236 |
|
11856
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6237 /********************************************************************** |
|
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6238 * UI operations |
|
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6239 **********************************************************************/ |
|
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6240 |
|
12131
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6241 gaim_signal_connect(gaim_connections_get_handle(), "signed-on", handle, |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6242 G_CALLBACK(account_signed_off_cb), |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6243 GINT_TO_POINTER(GAIM_CONV_ACCOUNT_ONLINE)); |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6244 gaim_signal_connect(gaim_connections_get_handle(), "signed-off", handle, |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6245 G_CALLBACK(account_signed_off_cb), |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6246 GINT_TO_POINTER(GAIM_CONV_ACCOUNT_OFFLINE)); |
|
cb7ccb5048cf
[gaim-migrate @ 14431]
Richard Laager <rlaager@wiktel.com>
parents:
12116
diff
changeset
|
6247 |
|
11856
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6248 gaim_signal_connect(blist_handle, "buddy-added", handle, |
| 11855 | 6249 G_CALLBACK(buddy_update_cb), NULL); |
|
11856
fa7b84231ece
[gaim-migrate @ 14147]
Richard Laager <rlaager@wiktel.com>
parents:
11855
diff
changeset
|
6250 gaim_signal_connect(blist_handle, "buddy-removed", handle, |
| 11855 | 6251 G_CALLBACK(buddy_update_cb), NULL); |
| 6252 | |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
6253 gaim_signal_connect(gaim_conversations_get_handle(), "received-im-msg", |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
6254 handle, G_CALLBACK(received_im_msg_cb), NULL); |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
6255 |
| 11581 | 6256 gaim_conversations_set_ui_ops(&conversation_ui_ops); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6257 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6258 hidden_convwin = gaim_gtk_conv_window_new(); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6259 window_list = g_list_remove(window_list, hidden_convwin); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6260 |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6261 gaim_signal_connect(gaim_accounts_get_handle(), "account-status-changed", |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6262 handle, GAIM_CALLBACK(account_status_changed_cb), NULL); |
|
5673
62f57ec16f29
[gaim-migrate @ 6091]
Christian Hammond <chipx86@chipx86.com>
parents:
5629
diff
changeset
|
6263 } |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6264 |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6265 void |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6266 gaim_gtk_conversations_uninit(void) |
|
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6267 { |
| 10443 | 6268 gaim_prefs_disconnect_by_handle(gaim_gtk_conversations_get_handle()); |
| 11855 | 6269 gaim_signals_disconnect_by_handle(gaim_gtk_conversations_get_handle()); |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6270 gaim_signals_unregister_by_instance(gaim_gtk_conversations_get_handle()); |
|
12116
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6271 gaim_gtk_conv_window_destroy(hidden_convwin); |
|
e75ef7aa913e
[gaim-migrate @ 14416]
Luke Schierer <lschiere@pidgin.im>
parents:
12101
diff
changeset
|
6272 hidden_convwin=NULL; |
|
8582
d7c85220c685
[gaim-migrate @ 9332]
Christian Hammond <chipx86@chipx86.com>
parents:
8573
diff
changeset
|
6273 } |
| 11581 | 6274 |
| 6275 | |
| 6276 | |
| 6277 | |
| 6278 | |
| 6279 | |
| 6280 | |
| 6281 | |
| 6282 | |
| 6283 | |
| 6284 | |
| 6285 | |
| 6286 | |
| 6287 | |
| 6288 | |
| 6289 | |
| 6290 /* down here is where gtkconvwin.c ought to start. except they share like every freaking function, | |
| 6291 * and touch each others' private members all day long */ | |
| 6292 | |
| 6293 /** | |
| 6294 * @file gtkconvwin.c GTK+ Conversation Window API | |
| 6295 * @ingroup gtkui | |
| 6296 * | |
| 6297 * gaim | |
| 6298 * | |
| 6299 * Gaim is the legal property of its developers, whose names are too numerous | |
| 6300 * to list here. Please refer to the COPYRIGHT file distributed with this | |
| 6301 * source distribution. | |
| 6302 * | |
| 6303 * This program is free software; you can redistribute it and/or modify | |
| 6304 * it under the terms of the GNU General Public License as published by | |
| 6305 * the Free Software Foundation; either version 2 of the License, or | |
| 6306 * (at your option) any later version. | |
| 6307 * | |
| 6308 * This program is distributed in the hope that it will be useful, | |
| 6309 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 6310 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 6311 * GNU General Public License for more details. | |
| 6312 * | |
| 6313 * You should have received a copy of the GNU General Public License | |
| 6314 * along with this program; if not, write to the Free Software | |
| 6315 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 6316 * | |
| 6317 */ | |
| 6318 #include "internal.h" | |
| 6319 #include "gtkgaim.h" | |
| 6320 | |
| 6321 | |
| 6322 #include <gdk/gdkkeysyms.h> | |
| 6323 | |
| 6324 #include "account.h" | |
| 6325 #include "cmds.h" | |
| 6326 #include "debug.h" | |
| 6327 #include "imgstore.h" | |
| 6328 #include "log.h" | |
| 6329 #include "notify.h" | |
| 6330 #include "prpl.h" | |
| 6331 #include "request.h" | |
| 6332 #include "util.h" | |
| 6333 | |
| 6334 #include "gtkdnd-hints.h" | |
| 6335 #include "gtkblist.h" | |
| 6336 #include "gtkconv.h" | |
| 6337 #include "gtkdialogs.h" | |
| 6338 #include "gtkmenutray.h" | |
| 6339 #include "gtkpounce.h" | |
| 6340 #include "gtkprefs.h" | |
| 6341 #include "gtkprivacy.h" | |
| 6342 #include "gtkutils.h" | |
| 6343 #include "gtkstock.h" | |
| 6344 #include "gtkimhtml.h" | |
| 6345 #include "gtkimhtmltoolbar.h" | |
| 6346 | |
| 6347 static void | |
| 6348 do_close(GtkWidget *w, int resp, GaimGtkWindow *win) | |
| 6349 { | |
| 6350 gtk_widget_destroy(warn_close_dialog); | |
| 6351 warn_close_dialog = NULL; | |
| 6352 | |
| 6353 if (resp == GTK_RESPONSE_OK) | |
| 6354 gaim_gtk_conv_window_destroy(win); | |
| 6355 } | |
| 6356 | |
| 6357 static void | |
| 6358 build_warn_close_dialog(GaimGtkWindow *gtkwin) | |
| 6359 { | |
| 6360 GtkWidget *label; | |
| 6361 GtkWidget *vbox, *hbox; | |
| 6362 GtkWidget *img; | |
| 6363 | |
| 6364 g_return_if_fail(warn_close_dialog == NULL); | |
| 6365 | |
| 6366 | |
| 6367 warn_close_dialog = gtk_dialog_new_with_buttons( | |
| 6368 _("Confirm close"), | |
| 6369 GTK_WINDOW(gtkwin->window), GTK_DIALOG_MODAL, | |
| 6370 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
| 6371 GTK_STOCK_CLOSE, GTK_RESPONSE_OK, NULL); | |
| 6372 | |
| 6373 gtk_dialog_set_default_response(GTK_DIALOG(warn_close_dialog), | |
| 6374 GTK_RESPONSE_OK); | |
| 6375 | |
| 6376 gtk_container_set_border_width(GTK_CONTAINER(warn_close_dialog), | |
| 6377 6); | |
| 6378 gtk_window_set_resizable(GTK_WINDOW(warn_close_dialog), FALSE); | |
| 6379 gtk_dialog_set_has_separator(GTK_DIALOG(warn_close_dialog), | |
| 6380 FALSE); | |
| 6381 | |
| 6382 /* Setup the outside spacing. */ | |
| 6383 vbox = GTK_DIALOG(warn_close_dialog)->vbox; | |
| 6384 | |
| 6385 gtk_box_set_spacing(GTK_BOX(vbox), 12); | |
| 6386 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); | |
| 6387 | |
| 6388 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_WARNING, | |
| 6389 GTK_ICON_SIZE_DIALOG); | |
| 6390 /* Setup the inner hbox and put the dialog's icon in it. */ | |
| 6391 hbox = gtk_hbox_new(FALSE, 12); | |
| 6392 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
| 6393 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
| 6394 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
| 6395 | |
| 6396 /* Setup the right vbox. */ | |
| 6397 vbox = gtk_vbox_new(FALSE, 12); | |
| 6398 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
| 6399 | |
| 6400 label = gtk_label_new(_("You have unread messages. Are you sure you want to close the window?")); | |
| 6401 gtk_widget_set_size_request(label, 350, -1); | |
| 6402 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
| 6403 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
| 6404 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
| 6405 | |
| 6406 /* Connect the signals. */ | |
| 6407 g_signal_connect(G_OBJECT(warn_close_dialog), "response", | |
| 6408 G_CALLBACK(do_close), gtkwin); | |
| 6409 | |
| 6410 } | |
| 6411 | |
| 6412 /************************************************************************** | |
| 6413 * Callbacks | |
| 6414 **************************************************************************/ | |
| 6415 | |
| 6416 static gboolean | |
| 6417 close_win_cb(GtkWidget *w, GdkEventAny *e, gpointer d) | |
| 6418 { | |
| 6419 GaimGtkWindow *win = d; | |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6420 GList *l; |
| 11581 | 6421 |
| 6422 /* If there are unread messages then show a warning dialog */ | |
| 6423 for (l = gaim_gtk_conv_window_get_gtkconvs(win); | |
| 6424 l != NULL; l = l->next) | |
| 6425 { | |
| 6426 GaimGtkConversation *gtkconv = l->data; | |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6427 if (gaim_conversation_get_type(gtkconv->active_conv) == GAIM_CONV_TYPE_IM && |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6428 gtkconv->unseen_state >= GAIM_UNSEEN_TEXT) |
|
11664
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6429 { |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6430 build_warn_close_dialog(win); |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6431 gtk_widget_show_all(warn_close_dialog); |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6432 |
|
38bbb0f15453
[gaim-migrate @ 13949]
Luke Schierer <lschiere@pidgin.im>
parents:
11657
diff
changeset
|
6433 return TRUE; |
| 11581 | 6434 } |
| 6435 } | |
| 6436 | |
| 6437 gaim_gtk_conv_window_destroy(win); | |
| 6438 | |
| 6439 return TRUE; | |
| 6440 } | |
| 6441 | |
| 11604 | 6442 static void |
| 6443 gtkconv_set_unseen(GaimGtkConversation *gtkconv, GaimUnseenState state) | |
| 6444 { | |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6445 if (state == GAIM_UNSEEN_NONE) |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6446 { |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6447 gtkconv->unseen_count = 0; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6448 gtkconv->unseen_state = GAIM_UNSEEN_NONE; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6449 } |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6450 else |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6451 { |
|
12468
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
6452 if (state >= GAIM_UNSEEN_TEXT) |
|
6faefbebcd24
[gaim-migrate @ 14778]
Richard Laager <rlaager@wiktel.com>
parents:
12463
diff
changeset
|
6453 gtkconv->unseen_count++; |
|
12175
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6454 |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6455 if (state > gtkconv->unseen_state) |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6456 gtkconv->unseen_state = state; |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6457 } |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6458 |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6459 /* emit update signal to notify of count and possible unseen state change */ |
|
a655bdeb561d
[gaim-migrate @ 14477]
Richard Laager <rlaager@wiktel.com>
parents:
12171
diff
changeset
|
6460 gaim_conversation_update(gtkconv->active_conv, GAIM_CONV_UPDATE_UNSEEN); |
|
12021
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
6461 } |
|
1a86417abfc8
[gaim-migrate @ 14314]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
12012
diff
changeset
|
6462 |
| 11581 | 6463 /* |
| 6464 * When a conversation window is focused, we know the user | |
| 6465 * has looked at it so we know there are no longer unseen | |
| 6466 * messages. | |
| 6467 */ | |
| 6468 static gint | |
| 6469 focus_win_cb(GtkWidget *w, GdkEventFocus *e, gpointer d) | |
| 6470 { | |
| 6471 GaimGtkWindow *win = d; | |
| 11604 | 6472 GaimGtkConversation *gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); |
| 6473 | |
| 6474 gtkconv_set_unseen(gtkconv, GAIM_UNSEEN_NONE); | |
| 11581 | 6475 |
| 6476 return FALSE; | |
| 6477 } | |
| 6478 | |
| 11851 | 6479 #if !GTK_CHECK_VERSION(2,6,0) |
| 11581 | 6480 /* Courtesy of Galeon! */ |
| 6481 static void | |
| 6482 tab_close_button_state_changed_cb(GtkWidget *widget, GtkStateType prev_state) | |
| 6483 { | |
| 6484 if (GTK_WIDGET_STATE(widget) == GTK_STATE_ACTIVE) | |
| 6485 gtk_widget_set_state(widget, GTK_STATE_NORMAL); | |
| 6486 } | |
| 11851 | 6487 #endif |
| 11581 | 6488 |
| 6489 static void | |
| 6490 notebook_init_grab(GaimGtkWindow *gtkwin, GtkWidget *widget) | |
| 6491 { | |
| 6492 static GdkCursor *cursor = NULL; | |
| 6493 | |
| 6494 gtkwin->in_drag = TRUE; | |
| 6495 | |
| 6496 if (gtkwin->drag_leave_signal) { | |
| 6497 g_signal_handler_disconnect(G_OBJECT(widget), | |
| 6498 gtkwin->drag_leave_signal); | |
| 6499 gtkwin->drag_leave_signal = 0; | |
| 6500 } | |
| 6501 | |
| 6502 if (cursor == NULL) | |
| 6503 cursor = gdk_cursor_new(GDK_FLEUR); | |
| 6504 | |
| 6505 /* Grab the pointer */ | |
| 6506 gtk_grab_add(gtkwin->notebook); | |
| 6507 #ifndef _WIN32 | |
| 6508 /* Currently for win32 GTK+ (as of 2.2.1), gdk_pointer_is_grabbed will | |
| 6509 always be true after a button press. */ | |
| 6510 if (!gdk_pointer_is_grabbed()) | |
| 6511 #endif | |
| 6512 gdk_pointer_grab(gtkwin->notebook->window, FALSE, | |
| 6513 GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, | |
| 6514 NULL, cursor, GDK_CURRENT_TIME); | |
| 6515 } | |
| 6516 | |
| 6517 static gboolean | |
| 6518 notebook_motion_cb(GtkWidget *widget, GdkEventButton *e, GaimGtkWindow *win) | |
| 6519 { | |
| 6520 | |
| 6521 /* | |
| 6522 * Make sure the user moved the mouse far enough for the | |
| 6523 * drag to be initiated. | |
| 6524 */ | |
| 6525 if (win->in_predrag) { | |
| 6526 if (e->x_root < win->drag_min_x || | |
| 6527 e->x_root >= win->drag_max_x || | |
| 6528 e->y_root < win->drag_min_y || | |
| 6529 e->y_root >= win->drag_max_y) { | |
| 6530 | |
| 6531 win->in_predrag = FALSE; | |
| 6532 notebook_init_grab(win, widget); | |
| 6533 } | |
| 6534 } | |
| 6535 else { /* Otherwise, draw the arrows. */ | |
| 6536 GaimGtkWindow *dest_win; | |
| 6537 GtkNotebook *dest_notebook; | |
| 6538 GtkWidget *tab; | |
| 6539 gint nb_x, nb_y, page_num; | |
| 6540 gint arrow1_x, arrow1_y, arrow2_x, arrow2_y; | |
| 6541 gboolean horiz_tabs = FALSE; | |
| 11614 | 6542 GaimGtkConversation *gtkconv; |
| 6543 gboolean to_right = FALSE; | |
| 11581 | 6544 |
| 6545 /* Get the window that the cursor is over. */ | |
| 6546 dest_win = gaim_gtk_conv_window_get_at_xy(e->x_root, e->y_root); | |
| 6547 | |
| 6548 if (dest_win == NULL) { | |
| 6549 dnd_hints_hide_all(); | |
| 6550 | |
| 6551 return TRUE; | |
| 6552 } | |
| 6553 | |
| 6554 dest_notebook = GTK_NOTEBOOK(dest_win->notebook); | |
| 6555 | |
| 6556 gdk_window_get_origin(GTK_WIDGET(dest_notebook)->window, &nb_x, &nb_y); | |
| 6557 | |
| 6558 arrow1_x = arrow2_x = nb_x; | |
| 6559 arrow1_y = arrow2_y = nb_y; | |
| 6560 | |
| 6561 page_num = gaim_gtkconv_get_tab_at_xy(dest_win, | |
| 11614 | 6562 e->x_root, e->y_root, &to_right); |
| 6563 to_right = to_right && (win != dest_win); | |
| 11581 | 6564 |
| 6565 if (gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_TOP || | |
| 6566 gtk_notebook_get_tab_pos(dest_notebook) == GTK_POS_BOTTOM) { | |
| 6567 | |
| 6568 horiz_tabs = TRUE; | |
| 6569 } | |
| 6570 | |
| 11614 | 6571 gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(dest_win, page_num); |
| 6572 tab = gtkconv->tabby; | |
| 11581 | 6573 |
| 6574 if (horiz_tabs) { | |
| 6575 arrow1_x = arrow2_x = nb_x + tab->allocation.x; | |
| 6576 | |
| 11614 | 6577 if (((gpointer)win == (gpointer)dest_win && win->drag_tab < page_num) || to_right) { |
| 11581 | 6578 arrow1_x += tab->allocation.width; |
| 6579 arrow2_x += tab->allocation.width; | |
| 6580 } | |
| 6581 | |
| 6582 arrow1_y = nb_y + tab->allocation.y; | |
| 6583 arrow2_y = nb_y + tab->allocation.y + | |
| 6584 tab->allocation.height; | |
| 6585 } else { | |
| 6586 arrow1_x = nb_x + tab->allocation.x; | |
| 6587 arrow2_x = nb_x + tab->allocation.x + | |
| 6588 tab->allocation.width; | |
| 6589 arrow1_y = arrow2_y = nb_y + tab->allocation.y + tab->allocation.height/2; | |
| 6590 | |
| 6591 if ((gpointer)win == (gpointer)dest_win && win->drag_tab < page_num) { | |
| 6592 arrow1_y += tab->allocation.height; | |
| 6593 arrow2_y += tab->allocation.height; | |
| 6594 } | |
| 6595 } | |
| 6596 | |
| 6597 if (horiz_tabs) { | |
| 6598 dnd_hints_show(HINT_ARROW_DOWN, arrow1_x, arrow1_y); | |
| 6599 dnd_hints_show(HINT_ARROW_UP, arrow2_x, arrow2_y); | |
| 6600 } else { | |
| 6601 dnd_hints_show(HINT_ARROW_RIGHT, arrow1_x, arrow1_y); | |
| 6602 dnd_hints_show(HINT_ARROW_LEFT, arrow2_x, arrow2_y); | |
| 6603 } | |
| 6604 } | |
| 6605 | |
| 6606 return TRUE; | |
| 6607 } | |
| 6608 | |
| 6609 static gboolean | |
| 6610 notebook_leave_cb(GtkWidget *widget, GdkEventCrossing *e, GaimGtkWindow *win) | |
| 6611 { | |
| 6612 if (win->in_drag) | |
| 6613 return FALSE; | |
| 6614 | |
| 6615 if (e->x_root < win->drag_min_x || | |
| 6616 e->x_root >= win->drag_max_x || | |
| 6617 e->y_root < win->drag_min_y || | |
| 6618 e->y_root >= win->drag_max_y) { | |
| 6619 | |
| 6620 win->in_predrag = FALSE; | |
| 6621 notebook_init_grab(win, widget); | |
| 6622 } | |
| 6623 | |
| 6624 return TRUE; | |
| 6625 } | |
| 6626 | |
| 6627 /* | |
| 6628 * THANK YOU GALEON! | |
| 6629 */ | |
| 6630 static gboolean | |
| 6631 notebook_press_cb(GtkWidget *widget, GdkEventButton *e, GaimGtkWindow *win) | |
| 6632 { | |
| 6633 gint nb_x, nb_y, x_rel, y_rel; | |
| 6634 int tab_clicked; | |
| 6635 GtkWidget *page; | |
| 6636 GtkWidget *tab; | |
| 6637 | |
| 6638 if (e->button != 1 || e->type != GDK_BUTTON_PRESS) | |
| 6639 return FALSE; | |
| 6640 | |
| 6641 | |
| 6642 if (win->in_drag) { | |
| 6643 gaim_debug(GAIM_DEBUG_WARNING, "gtkconv", | |
| 6644 "Already in the middle of a window drag at tab_press_cb\n"); | |
| 6645 return TRUE; | |
| 6646 } | |
| 6647 | |
| 6648 /* | |
| 6649 * Make sure a tab was actually clicked. The arrow buttons | |
| 6650 * mess things up. | |
| 6651 */ | |
| 11614 | 6652 tab_clicked = gaim_gtkconv_get_tab_at_xy(win, e->x_root, e->y_root, NULL); |
| 11581 | 6653 |
| 6654 if (tab_clicked == -1) | |
| 6655 return FALSE; | |
| 6656 | |
| 6657 /* | |
| 6658 * Get the relative position of the press event, with regards to | |
| 6659 * the position of the notebook. | |
| 6660 */ | |
| 6661 gdk_window_get_origin(win->notebook->window, &nb_x, &nb_y); | |
| 6662 | |
| 6663 x_rel = e->x_root - nb_x; | |
| 6664 y_rel = e->y_root - nb_y; | |
| 6665 | |
| 6666 /* Reset the min/max x/y */ | |
| 6667 win->drag_min_x = 0; | |
| 6668 win->drag_min_y = 0; | |
| 6669 win->drag_max_x = 0; | |
| 6670 win->drag_max_y = 0; | |
| 6671 | |
| 6672 /* Find out which tab was dragged. */ | |
| 6673 page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), tab_clicked); | |
| 6674 tab = gtk_notebook_get_tab_label(GTK_NOTEBOOK(win->notebook), page); | |
| 6675 | |
| 6676 win->drag_min_x = tab->allocation.x + nb_x; | |
| 6677 win->drag_min_y = tab->allocation.y + nb_y; | |
| 6678 win->drag_max_x = tab->allocation.width + win->drag_min_x; | |
| 6679 win->drag_max_y = tab->allocation.height + win->drag_min_y; | |
| 6680 | |
| 6681 /* Make sure the click occurred in the tab. */ | |
| 6682 if (e->x_root < win->drag_min_x || | |
| 6683 e->x_root >= win->drag_max_x || | |
| 6684 e->y_root < win->drag_min_y || | |
| 6685 e->y_root >= win->drag_max_y) { | |
| 6686 | |
| 6687 return FALSE; | |
| 6688 } | |
| 6689 | |
| 6690 win->in_predrag = TRUE; | |
| 6691 win->drag_tab = tab_clicked; | |
| 6692 | |
| 6693 /* Connect the new motion signals. */ | |
| 6694 win->drag_motion_signal = | |
| 6695 g_signal_connect(G_OBJECT(widget), "motion_notify_event", | |
| 6696 G_CALLBACK(notebook_motion_cb), win); | |
| 6697 | |
| 6698 win->drag_leave_signal = | |
| 6699 g_signal_connect(G_OBJECT(widget), "leave_notify_event", | |
| 6700 G_CALLBACK(notebook_leave_cb), win); | |
| 6701 | |
| 6702 return FALSE; | |
| 6703 } | |
| 6704 | |
| 6705 static gboolean | |
| 6706 notebook_release_cb(GtkWidget *widget, GdkEventButton *e, GaimGtkWindow *win) | |
| 6707 { | |
| 6708 GaimGtkWindow *dest_win; | |
| 6709 GaimConversation *conv; | |
| 6710 GaimGtkConversation *gtkconv; | |
| 6711 gint dest_page_num = 0; | |
| 6712 gboolean new_window = FALSE; | |
| 11614 | 6713 gboolean to_right = FALSE; |
| 11581 | 6714 |
| 6715 /* | |
| 6716 * Don't check to make sure that the event's window matches the | |
| 6717 * widget's, because we may be getting an event passed on from the | |
| 6718 * close button. | |
| 6719 */ | |
| 6720 if (e->button != 1 && e->type != GDK_BUTTON_RELEASE) | |
| 6721 return FALSE; | |
| 6722 | |
| 6723 if (gdk_pointer_is_grabbed()) { | |
| 6724 gdk_pointer_ungrab(GDK_CURRENT_TIME); | |
| 6725 gtk_grab_remove(widget); | |
| 6726 } | |
| 6727 | |
| 6728 if (!win->in_predrag && !win->in_drag) | |
| 6729 return FALSE; | |
| 6730 | |
| 6731 /* Disconnect the motion signal. */ | |
| 6732 if (win->drag_motion_signal) { | |
| 6733 g_signal_handler_disconnect(G_OBJECT(widget), | |
| 6734 win->drag_motion_signal); | |
| 6735 | |
| 6736 win->drag_motion_signal = 0; | |
| 6737 } | |
| 6738 | |
| 6739 /* | |
| 6740 * If we're in a pre-drag, we'll also need to disconnect the leave | |
| 6741 * signal. | |
| 6742 */ | |
| 6743 if (win->in_predrag) { | |
| 6744 win->in_predrag = FALSE; | |
| 6745 | |
| 6746 if (win->drag_leave_signal) { | |
| 6747 g_signal_handler_disconnect(G_OBJECT(widget), | |
| 6748 win->drag_leave_signal); | |
| 6749 | |
| 6750 win->drag_leave_signal = 0; | |
| 6751 } | |
| 6752 } | |
| 6753 | |
| 6754 /* If we're not in drag... */ | |
| 6755 /* We're perfectly normal people! */ | |
| 6756 if (!win->in_drag) | |
| 6757 return FALSE; | |
| 6758 | |
| 6759 win->in_drag = FALSE; | |
| 6760 | |
| 6761 dnd_hints_hide_all(); | |
| 6762 | |
| 6763 dest_win = gaim_gtk_conv_window_get_at_xy(e->x_root, e->y_root); | |
| 6764 | |
| 6765 conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 6766 | |
| 6767 if (dest_win == NULL) { | |
| 6768 /* If the current window doesn't have any other conversations, | |
| 6769 * there isn't much point transferring the conv to a new window. */ | |
| 6770 if (gaim_gtk_conv_window_get_gtkconv_count(win) > 1) { | |
| 6771 /* Make a new window to stick this to. */ | |
| 6772 dest_win = gaim_gtk_conv_window_new(); | |
| 6773 new_window = TRUE; | |
| 6774 } | |
| 6775 } | |
| 6776 | |
| 6777 if (dest_win == NULL) | |
| 6778 return FALSE; | |
| 6779 | |
| 6780 gaim_signal_emit(gaim_gtk_conversations_get_handle(), | |
| 6781 "conversation-dragging", win, dest_win); | |
| 6782 | |
| 6783 /* Get the destination page number. */ | |
| 6784 if (!new_window) | |
| 6785 dest_page_num = gaim_gtkconv_get_tab_at_xy(dest_win, | |
| 11614 | 6786 e->x_root, e->y_root, &to_right); |
| 11581 | 6787 |
| 6788 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 6789 | |
| 6790 if (win == dest_win) { | |
| 6791 gtk_notebook_reorder_child(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont, dest_page_num); | |
| 6792 } else { | |
| 6793 gaim_gtk_conv_window_remove_gtkconv(win, gtkconv); | |
| 6794 gaim_gtk_conv_window_add_gtkconv(dest_win, gtkconv); | |
| 11614 | 6795 gtk_notebook_reorder_child(GTK_NOTEBOOK(dest_win->notebook), gtkconv->tab_cont, dest_page_num + to_right); |
| 11581 | 6796 gaim_gtk_conv_window_switch_gtkconv(dest_win, gtkconv); |
| 6797 if (new_window) { | |
| 6798 gint win_width, win_height; | |
| 6799 | |
| 6800 gtk_window_get_size(GTK_WINDOW(dest_win->window), | |
| 6801 &win_width, &win_height); | |
| 6802 | |
| 6803 gtk_window_move(GTK_WINDOW(dest_win->window), | |
| 6804 e->x_root - (win_width / 2), | |
| 6805 e->y_root - (win_height / 2)); | |
| 6806 | |
| 6807 gaim_gtk_conv_window_show(dest_win); | |
| 6808 } | |
| 6809 } | |
| 6810 | |
| 6811 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | |
| 6812 | |
| 6813 return TRUE; | |
| 6814 } | |
| 6815 | |
| 6816 | |
| 6817 static void | |
| 6818 before_switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, | |
| 6819 gpointer user_data) | |
| 6820 { | |
| 6821 GaimGtkWindow *win; | |
| 6822 GaimConversation *conv; | |
| 6823 GaimGtkConversation *gtkconv; | |
| 6824 | |
| 6825 win = user_data; | |
| 6826 conv = gaim_gtk_conv_window_get_active_conversation(win); | |
| 6827 | |
| 6828 g_return_if_fail(conv != NULL); | |
| 6829 | |
| 6830 if (gaim_conversation_get_type(conv) != GAIM_CONV_TYPE_IM) | |
| 6831 return; | |
| 6832 | |
| 6833 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
| 6834 | |
| 6835 stop_anim(NULL, gtkconv); | |
| 6836 } | |
|
12085
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6837 static void |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6838 close_window(GtkWidget *w, GaimGtkWindow *win) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6839 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6840 close_win_cb(w, NULL, win); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6841 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6842 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6843 static void |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6844 detach_tab_cb(GtkWidget *w, GObject *menu) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6845 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6846 GaimGtkWindow *win, *new_window; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6847 GaimGtkConversation *gtkconv; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6848 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6849 gtkconv = g_object_get_data(menu, "clicked_tab"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6850 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6851 if (!gtkconv) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6852 return; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6853 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6854 win = gaim_gtkconv_get_window(gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6855 /* Nothing to do if there's only one tab in the window */ |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6856 if (gaim_gtk_conv_window_get_gtkconv_count(win) == 1) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6857 return; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6858 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6859 gaim_gtk_conv_window_remove_gtkconv(win, gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6860 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6861 new_window = gaim_gtk_conv_window_new(); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6862 gaim_gtk_conv_window_add_gtkconv(new_window, gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6863 gaim_gtk_conv_window_show(new_window); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6864 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6865 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6866 static void |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6867 close_others_cb(GtkWidget *w, GObject *menu) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6868 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6869 GList *iter; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6870 GaimGtkConversation *gtkconv; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6871 GaimGtkWindow *win; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6872 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6873 gtkconv = g_object_get_data(menu, "clicked_tab"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6874 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6875 if (!gtkconv) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6876 return; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6877 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6878 win = gaim_gtkconv_get_window(gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6879 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6880 for (iter = gaim_gtk_conv_window_get_gtkconvs(win); iter; ) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6881 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6882 GaimGtkConversation *gconv = iter->data; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6883 iter = iter->next; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6884 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6885 if (gconv != gtkconv) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6886 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6887 close_conv_cb(NULL, gconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6888 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6889 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6890 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6891 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6892 static void close_tab_cb(GtkWidget *w, GObject *menu) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6893 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6894 GaimGtkConversation *gtkconv; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6895 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6896 gtkconv = g_object_get_data(menu, "clicked_tab"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6897 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6898 if (gtkconv) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6899 close_conv_cb(NULL, gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6900 } |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6901 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6902 static gboolean |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6903 right_click_menu_cb(GtkNotebook *notebook, GdkEventButton *event, GaimGtkWindow *win) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6904 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6905 GtkWidget *item, *menu; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6906 GaimGtkConversation *gtkconv; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6907 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6908 if (event->type != GDK_BUTTON_PRESS || event->button != 3) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6909 return FALSE; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6910 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6911 gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, |
|
12140
ed6c64e5e0ed
[gaim-migrate @ 14441]
Richard Laager <rlaager@wiktel.com>
parents:
12136
diff
changeset
|
6912 gaim_gtkconv_get_tab_at_xy(win, event->x_root, event->y_root, NULL)); |
|
12085
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6913 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6914 if (g_object_get_data(G_OBJECT(notebook->menu), "clicked_tab")) |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6915 { |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6916 g_object_set_data(G_OBJECT(notebook->menu), "clicked_tab", gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6917 return FALSE; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6918 } |
| 12188 | 6919 |
|
12085
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6920 g_object_set_data(G_OBJECT(notebook->menu), "clicked_tab", gtkconv); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6921 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6922 menu = notebook->menu; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6923 gaim_separator(GTK_WIDGET(menu)); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6924 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6925 item = gtk_menu_item_new_with_label("Detach this tab"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6926 gtk_widget_show(item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6927 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6928 g_signal_connect(G_OBJECT(item), "activate", |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6929 G_CALLBACK(detach_tab_cb), menu); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6930 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6931 item = gtk_menu_item_new_with_label("Close this tab"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6932 gtk_widget_show(item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6933 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6934 g_signal_connect(G_OBJECT(item), "activate", |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6935 G_CALLBACK(close_tab_cb), menu); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6936 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6937 gaim_separator(menu); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6938 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6939 item = gtk_menu_item_new_with_label("Close other tabs"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6940 gtk_widget_show(item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6941 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6942 g_signal_connect(G_OBJECT(item), "activate", |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6943 G_CALLBACK(close_others_cb), menu); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6944 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6945 item = gtk_menu_item_new_with_label("Close all tabs"); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6946 gtk_widget_show(item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6947 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6948 g_signal_connect(G_OBJECT(item), "activate", |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6949 G_CALLBACK(close_window), win); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6950 |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6951 return FALSE; |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
6952 } |
| 11581 | 6953 |
| 6954 static void | |
| 6955 switch_conv_cb(GtkNotebook *notebook, GtkWidget *page, gint page_num, | |
| 6956 gpointer user_data) | |
| 6957 { | |
| 6958 GaimGtkWindow *win; | |
| 6959 GaimConversation *conv; | |
| 6960 GaimGtkConversation *gtkconv; | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6961 const char *sound_method; |
| 11581 | 6962 |
| 6963 win = user_data; | |
| 6964 gtkconv = gaim_gtk_conv_window_get_gtkconv_at_index(win, page_num); | |
| 6965 conv = gtkconv->active_conv; | |
| 6966 | |
| 6967 g_return_if_fail(conv != NULL); | |
| 6968 | |
| 6969 /* | |
| 6970 * Only set "unseen" to "none" if the window has focus | |
| 6971 */ | |
| 6972 if (gaim_gtk_conv_window_has_focus(win)) | |
| 11604 | 6973 gtkconv_set_unseen(gtkconv, GAIM_UNSEEN_NONE); |
| 11581 | 6974 |
| 6975 /* Update the menubar */ | |
| 6976 | |
|
11672
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
6977 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtkconv->win->menu.logging), |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
6978 gaim_conversation_is_logging(conv)); |
|
04e0189bb519
[gaim-migrate @ 13958]
Richard Laager <rlaager@wiktel.com>
parents:
11671
diff
changeset
|
6979 |
| 11594 | 6980 generate_send_to_items(win); |
| 6981 | |
| 11604 | 6982 gaim_gtkconv_switch_active_conversation(conv); |
| 11581 | 6983 |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6984 sound_method = gaim_prefs_get_string("/gaim/gtk/sound/method"); |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6985 if (strcmp(sound_method, "none") != 0) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6986 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.sounds), |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6987 gtkconv->make_sound); |
| 11581 | 6988 |
| 6989 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_formatting_toolbar), | |
| 6990 gaim_prefs_get_bool("/gaim/gtk/conversations/show_formatting_toolbar")); | |
| 6991 | |
| 6992 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_timestamps), | |
| 12188 | 6993 gaim_prefs_get_bool("/gaim/gtk/conversations/show_timestamps")); |
| 11581 | 6994 |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6995 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM && |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6996 gaim_prefs_get_bool("/gaim/gtk/conversations/im/show_buddy_icons")) |
|
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
6997 { |
| 11581 | 6998 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(win->menu.show_icon), |
| 6999 gtkconv->u.im->show_icon); | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
7000 } |
| 11604 | 7001 |
| 11581 | 7002 /* |
| 7003 * We pause icons when they are not visible. If this icon should | |
| 7004 * be animated then start it back up again. | |
| 7005 */ | |
| 7006 if ((gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) && | |
| 7007 (gtkconv->u.im->animate)) | |
| 7008 start_anim(NULL, gtkconv); | |
|
12639
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
7009 |
|
366326fa9cb4
[gaim-migrate @ 14975]
Richard Laager <rlaager@wiktel.com>
parents:
12638
diff
changeset
|
7010 gaim_signal_emit(gaim_gtk_conversations_get_handle(), "conversation-switched", conv); |
| 11581 | 7011 } |
| 7012 | |
| 7013 /************************************************************************** | |
| 7014 * GTK+ window ops | |
| 7015 **************************************************************************/ | |
| 7016 | |
| 7017 GList * | |
| 7018 gaim_gtk_conv_windows_get_list() | |
| 7019 { | |
| 7020 return window_list; | |
| 7021 } | |
| 7022 | |
| 7023 GaimGtkWindow * | |
| 7024 gaim_gtk_conv_window_new() | |
| 7025 { | |
| 7026 GaimGtkWindow *win; | |
| 7027 GtkPositionType pos; | |
| 7028 GtkWidget *testidea; | |
| 7029 GtkWidget *menubar; | |
| 7030 | |
| 7031 win = g_malloc0(sizeof(GaimGtkWindow)); | |
| 7032 | |
| 7033 window_list = g_list_append(window_list, win); | |
| 7034 | |
| 7035 /* Create the window. */ | |
| 7036 win->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); | |
| 7037 gtk_window_set_role(GTK_WINDOW(win->window), "conversation"); | |
| 7038 gtk_window_set_resizable(GTK_WINDOW(win->window), TRUE); | |
| 7039 gtk_container_set_border_width(GTK_CONTAINER(win->window), 0); | |
| 7040 GTK_WINDOW(win->window)->allow_shrink = TRUE; | |
| 7041 | |
| 7042 g_signal_connect(G_OBJECT(win->window), "delete_event", | |
| 7043 G_CALLBACK(close_win_cb), win); | |
| 7044 | |
| 7045 g_signal_connect(G_OBJECT(win->window), "focus_in_event", | |
| 7046 G_CALLBACK(focus_win_cb), win); | |
| 7047 | |
| 7048 /* Create the notebook. */ | |
| 7049 win->notebook = gtk_notebook_new(); | |
| 7050 | |
| 7051 pos = gaim_prefs_get_int("/gaim/gtk/conversations/tab_side"); | |
| 7052 | |
| 7053 #if 0 | |
| 7054 gtk_notebook_set_tab_hborder(GTK_NOTEBOOK(win->notebook), 0); | |
| 7055 gtk_notebook_set_tab_vborder(GTK_NOTEBOOK(win->notebook), 0); | |
| 7056 #endif | |
| 7057 gtk_notebook_set_tab_pos(GTK_NOTEBOOK(win->notebook), pos); | |
| 7058 gtk_notebook_set_scrollable(GTK_NOTEBOOK(win->notebook), TRUE); | |
| 7059 gtk_notebook_popup_enable(GTK_NOTEBOOK(win->notebook)); | |
| 7060 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), FALSE); | |
| 7061 gtk_notebook_set_show_border(GTK_NOTEBOOK(win->notebook), FALSE); | |
| 7062 | |
|
12085
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
7063 g_signal_connect(G_OBJECT(win->notebook), "button-press-event", |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
7064 G_CALLBACK(right_click_menu_cb), win); |
|
9b886b6e3002
[gaim-migrate @ 14382]
Gary Kramlich <grim@reaperworld.com>
parents:
12084
diff
changeset
|
7065 |
| 11581 | 7066 gtk_widget_show(win->notebook); |
| 7067 | |
| 7068 g_signal_connect(G_OBJECT(win->notebook), "switch_page", | |
| 7069 G_CALLBACK(before_switch_conv_cb), win); | |
| 7070 g_signal_connect_after(G_OBJECT(win->notebook), "switch_page", | |
| 7071 G_CALLBACK(switch_conv_cb), win); | |
| 7072 | |
| 7073 /* Setup the tab drag and drop signals. */ | |
| 7074 gtk_widget_add_events(win->notebook, | |
| 7075 GDK_BUTTON1_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK); | |
| 7076 g_signal_connect(G_OBJECT(win->notebook), "button_press_event", | |
| 7077 G_CALLBACK(notebook_press_cb), win); | |
| 7078 g_signal_connect(G_OBJECT(win->notebook), "button_release_event", | |
| 7079 G_CALLBACK(notebook_release_cb), win); | |
| 7080 | |
| 7081 testidea = gtk_vbox_new(FALSE, 0); | |
| 7082 | |
| 7083 /* Setup the menubar. */ | |
| 7084 menubar = setup_menubar(win); | |
| 7085 gtk_box_pack_start(GTK_BOX(testidea), menubar, FALSE, TRUE, 0); | |
| 7086 | |
| 7087 gtk_box_pack_start(GTK_BOX(testidea), win->notebook, TRUE, TRUE, 0); | |
| 7088 | |
| 7089 gtk_container_add(GTK_CONTAINER(win->window), testidea); | |
| 7090 | |
| 7091 gtk_widget_show(testidea); | |
| 7092 | |
| 7093 return win; | |
| 7094 } | |
| 7095 | |
| 7096 void | |
| 7097 gaim_gtk_conv_window_destroy(GaimGtkWindow *win) | |
| 7098 { | |
|
12594
3d34460ecfd6
[gaim-migrate @ 14924]
Richard Laager <rlaager@wiktel.com>
parents:
12579
diff
changeset
|
7099 gaim_prefs_disconnect_by_handle(win); |
| 11581 | 7100 window_list = g_list_remove(window_list, win); |
| 7101 | |
| 11611 | 7102 if (win->gtkconvs) { |
| 7103 while (win->gtkconvs) { | |
| 7104 GList *nextgtk = win->gtkconvs->next; | |
| 7105 GaimGtkConversation *gtkconv = win->gtkconvs->data; | |
| 7106 GList *nextcore = gtkconv->convs->next; | |
| 7107 GaimConversation *conv = gtkconv->convs->data; | |
| 7108 gaim_conversation_destroy(conv); | |
| 7109 if (!nextgtk && !nextcore) | |
| 7110 /* we'll end up invoking ourselves when we destroy our last child */ | |
| 7111 /* so don't destroy ourselves right now */ | |
| 7112 return; | |
| 7113 } | |
| 7114 return; | |
| 7115 } | |
| 11581 | 7116 gtk_widget_destroy(win->window); |
| 7117 | |
| 7118 g_object_unref(G_OBJECT(win->menu.item_factory)); | |
| 7119 | |
| 7120 g_free(win); | |
| 7121 } | |
| 7122 | |
| 7123 void | |
| 7124 gaim_gtk_conv_window_show(GaimGtkWindow *win) | |
| 7125 { | |
| 7126 gtk_widget_show(win->window); | |
| 7127 } | |
| 7128 | |
| 7129 void | |
| 7130 gaim_gtk_conv_window_hide(GaimGtkWindow *win) | |
| 7131 { | |
| 7132 gtk_widget_hide(win->window); | |
| 7133 } | |
| 7134 | |
| 7135 void | |
| 7136 gaim_gtk_conv_window_raise(GaimGtkWindow *win) | |
| 7137 { | |
|
12084
d4728e1abe7b
[gaim-migrate @ 14381]
Gary Kramlich <grim@reaperworld.com>
parents:
12080
diff
changeset
|
7138 gtk_window_present(GTK_WINDOW(win->window)); |
| 11581 | 7139 } |
| 7140 | |
| 7141 void | |
| 7142 gaim_gtk_conv_window_switch_gtkconv(GaimGtkWindow *win, GaimGtkConversation *gtkconv) | |
| 7143 { | |
| 7144 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), | |
| 7145 gtk_notebook_page_num(GTK_NOTEBOOK(win->notebook), | |
| 7146 gtkconv->tab_cont)); | |
| 7147 } | |
| 7148 | |
| 7149 void | |
| 7150 gaim_gtk_conv_window_add_gtkconv(GaimGtkWindow *win, GaimGtkConversation *gtkconv) | |
| 7151 { | |
| 7152 GaimConversation *conv = gtkconv->active_conv; | |
| 7153 GaimGtkConversation *focus_gtkconv; | |
| 7154 GtkWidget *tabby, *menu_tabby; | |
| 7155 GtkWidget *tab_cont = gtkconv->tab_cont; | |
| 7156 GtkWidget *close_image; | |
| 7157 GaimConversationType conv_type; | |
| 7158 const char *name; | |
| 7159 const gchar *tmp_lab; | |
| 7160 gint close_button_width, close_button_height, focus_width, focus_pad; | |
| 11619 | 7161 gboolean tabs_side = FALSE; |
| 7162 gint angle = 0; | |
| 11581 | 7163 |
| 7164 name = gaim_conversation_get_name(conv); | |
| 7165 conv_type = gaim_conversation_get_type(conv); | |
| 7166 | |
| 7167 | |
| 7168 win->gtkconvs = g_list_append(win->gtkconvs, gtkconv); | |
| 7169 gtkconv->win = win; | |
| 7170 | |
| 11619 | 7171 if (gaim_prefs_get_int("/gaim/gtk/conversations/tab_side") == GTK_POS_LEFT || |
| 7172 gaim_prefs_get_int("/gaim/gtk/conversations/tab_side") == GTK_POS_RIGHT) | |
| 7173 tabs_side = TRUE; | |
| 7174 else if (gaim_prefs_get_int("/gaim/gtk/conversations/tab_side") == (GTK_POS_LEFT|8)) | |
| 7175 angle = 90; | |
| 7176 else if (gaim_prefs_get_int("/gaim/gtk/conversations/tab_side") == (GTK_POS_RIGHT|8)) | |
| 7177 angle = 270; | |
| 7178 | |
| 7179 if (angle) | |
| 7180 gtkconv->tabby = tabby = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE); | |
| 7181 else | |
| 7182 gtkconv->tabby = tabby = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); | |
| 11581 | 7183 gtkconv->menu_tabby = menu_tabby = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE); |
| 7184 | |
| 7185 /* Close button. */ | |
| 7186 gtkconv->close = gtk_button_new(); | |
| 7187 gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &close_button_width, &close_button_height); | |
| 7188 if (gtk_check_version(2, 4, 2) == NULL) { | |
| 7189 /* Need to account for extra padding around the gtkbutton */ | |
| 7190 gtk_widget_style_get(GTK_WIDGET(gtkconv->close), | |
| 7191 "focus-line-width", &focus_width, | |
| 7192 "focus-padding", &focus_pad, | |
| 7193 NULL); | |
| 7194 close_button_width += (focus_width + focus_pad) * 2; | |
| 7195 close_button_height += (focus_width + focus_pad) * 2; | |
| 7196 } | |
| 7197 gtk_widget_set_size_request(GTK_WIDGET(gtkconv->close), | |
| 7198 close_button_width, close_button_height); | |
| 7199 | |
| 7200 gtk_button_set_relief(GTK_BUTTON(gtkconv->close), GTK_RELIEF_NONE); | |
| 7201 close_image = gtk_image_new_from_stock(GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU); | |
| 7202 gtk_widget_show(close_image); | |
| 7203 gtk_container_add(GTK_CONTAINER(gtkconv->close), close_image); | |
| 7204 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->close, | |
| 7205 _("Close conversation"), NULL); | |
| 7206 | |
| 7207 g_signal_connect(G_OBJECT(gtkconv->close), "clicked", | |
| 7208 G_CALLBACK(close_conv_cb), gtkconv); | |
| 7209 | |
| 11851 | 7210 #if !GTK_CHECK_VERSION(2,6,0) |
| 11581 | 7211 /* |
| 7212 * I love Galeon. They have a fix for that stupid annoying visible | |
| 7213 * border bug. I love you guys! -- ChipX86 | |
| 7214 */ | |
| 11851 | 7215 /* This is fixed properly in some version of Gtk before 2.6.0 */ |
| 11581 | 7216 g_signal_connect(G_OBJECT(gtkconv->close), "state_changed", |
| 7217 G_CALLBACK(tab_close_button_state_changed_cb), NULL); | |
| 11851 | 7218 #endif |
| 11581 | 7219 |
| 7220 /* Status icon. */ | |
| 7221 gtkconv->icon = gtk_image_new(); | |
| 7222 gtkconv->menu_icon = gtk_image_new(); | |
| 7223 update_tab_icon(conv); | |
| 7224 | |
| 7225 /* Tab label. */ | |
| 7226 gtkconv->tab_label = gtk_label_new(tmp_lab = gaim_conversation_get_title(conv)); | |
| 11619 | 7227 |
| 11581 | 7228 #if GTK_CHECK_VERSION(2,6,0) |
| 11619 | 7229 if (!angle) |
| 7230 g_object_set(G_OBJECT(gtkconv->tab_label), "ellipsize", PANGO_ELLIPSIZE_END, NULL); | |
| 11581 | 7231 gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), 6); |
| 11619 | 7232 if (tabs_side) { |
| 7233 gtk_label_set_width_chars(GTK_LABEL(gtkconv->tab_label), MIN(g_utf8_strlen(tmp_lab, -1), 18)); | |
| 7234 } | |
| 7235 if (angle) | |
| 7236 gtk_label_set_angle(GTK_LABEL(gtkconv->tab_label), angle); | |
| 11581 | 7237 #endif |
| 7238 gtkconv->menu_label = gtk_label_new(gaim_conversation_get_title(conv)); | |
| 7239 #if 0 | |
| 7240 gtk_misc_set_alignment(GTK_MISC(gtkconv->tab_label), 0.00, 0.5); | |
| 7241 gtk_misc_set_padding(GTK_MISC(gtkconv->tab_label), 4, 0); | |
| 7242 #endif | |
| 7243 | |
| 7244 /* Pack it all together. */ | |
| 11619 | 7245 if (angle == 90) |
| 7246 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->close, FALSE, FALSE, 0); | |
| 7247 else | |
| 7248 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->icon, FALSE, FALSE, 0); | |
| 11581 | 7249 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_icon, |
| 7250 FALSE, FALSE, 0); | |
| 7251 | |
| 7252 gtk_widget_show_all(gtkconv->icon); | |
| 7253 gtk_widget_show_all(gtkconv->menu_icon); | |
| 7254 | |
| 7255 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->tab_label, TRUE, TRUE, 0); | |
| 7256 gtk_box_pack_start(GTK_BOX(menu_tabby), gtkconv->menu_label, TRUE, TRUE, 0); | |
| 7257 gtk_widget_show(gtkconv->tab_label); | |
| 7258 gtk_widget_show(gtkconv->menu_label); | |
| 7259 gtk_misc_set_alignment(GTK_MISC(gtkconv->menu_label), 0, 0); | |
| 7260 | |
| 11619 | 7261 if (angle == 90) |
| 7262 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->icon, FALSE, FALSE, 0); | |
| 7263 else | |
| 7264 gtk_box_pack_start(GTK_BOX(tabby), gtkconv->close, FALSE, FALSE, 0); | |
| 11581 | 7265 if (gaim_prefs_get_bool("/gaim/gtk/conversations/close_on_tabs")) |
| 7266 gtk_widget_show(gtkconv->close); | |
| 7267 | |
| 7268 gtk_widget_show(tabby); | |
| 7269 gtk_widget_show(menu_tabby); | |
| 7270 | |
| 7271 if (gaim_conversation_get_type(conv) == GAIM_CONV_TYPE_IM) | |
| 7272 gaim_gtkconv_update_buddy_icon(conv); | |
| 7273 | |
| 7274 /* Add this pane to the conversation's notebook. */ | |
| 7275 gtk_notebook_append_page_menu(GTK_NOTEBOOK(win->notebook), tab_cont, tabby, menu_tabby); | |
| 11619 | 7276 gtk_notebook_set_tab_label_packing(GTK_NOTEBOOK(win->notebook), tab_cont, !tabs_side && !angle, TRUE, GTK_PACK_START); |
| 11581 | 7277 |
| 7278 | |
| 7279 gtk_widget_show(tab_cont); | |
| 7280 | |
| 7281 if (gaim_gtk_conv_window_get_gtkconv_count(win) == 1) { | |
| 7282 /* Er, bug in notebooks? Switch to the page manually. */ | |
| 7283 gtk_notebook_set_current_page(GTK_NOTEBOOK(win->notebook), 0); | |
| 7284 | |
| 7285 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), | |
| 7286 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")); | |
| 7287 } else | |
| 7288 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), TRUE); | |
| 7289 | |
| 7290 focus_gtkconv = g_list_nth_data(gaim_gtk_conv_window_get_gtkconvs(win), | |
| 7291 gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook))); | |
| 7292 gtk_widget_grab_focus(focus_gtkconv->entry); | |
| 7293 | |
| 7294 if (gaim_gtk_conv_window_get_gtkconv_count(win) == 1) | |
| 11734 | 7295 update_send_to_selection(win); |
| 11581 | 7296 } |
| 7297 | |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
7298 void |
|
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
7299 gaim_gtk_conv_window_remove_gtkconv(GaimGtkWindow *win, GaimGtkConversation *gtkconv) |
| 11581 | 7300 { |
| 7301 unsigned int index; | |
| 7302 GaimConversationType conv_type; | |
| 7303 | |
| 7304 conv_type = gaim_conversation_get_type(gtkconv->active_conv); | |
| 7305 index = gtk_notebook_page_num(GTK_NOTEBOOK(win->notebook), gtkconv->tab_cont); | |
| 7306 | |
| 7307 g_object_ref(gtkconv->tab_cont); | |
| 7308 gtk_object_sink(GTK_OBJECT(gtkconv->tab_cont)); | |
| 7309 | |
| 7310 gtk_notebook_remove_page(GTK_NOTEBOOK(win->notebook), index); | |
| 7311 | |
| 7312 /* go back to tabless if need be */ | |
| 7313 if (gaim_gtk_conv_window_get_gtkconv_count(win) <= 2) { | |
| 7314 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(win->notebook), | |
| 7315 gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")); | |
| 7316 } | |
| 7317 | |
| 7318 win->gtkconvs = g_list_remove(win->gtkconvs, gtkconv); | |
| 11582 | 7319 |
|
12288
3897229ccb33
[gaim-migrate @ 14592]
Luke Schierer <lschiere@pidgin.im>
parents:
12286
diff
changeset
|
7320 if (!win->gtkconvs && win != hidden_convwin) |
| 11582 | 7321 gaim_gtk_conv_window_destroy(win); |
| 11581 | 7322 } |
| 7323 | |
| 7324 GaimGtkConversation * | |
| 7325 gaim_gtk_conv_window_get_gtkconv_at_index(const GaimGtkWindow *win, int index) | |
| 7326 { | |
| 7327 GtkWidget *tab_cont; | |
| 7328 | |
| 7329 if (index == -1) | |
| 7330 index = 0; | |
| 7331 tab_cont = gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), index); | |
| 11604 | 7332 return tab_cont ? g_object_get_data(G_OBJECT(tab_cont), "GaimGtkConversation") : NULL; |
| 11581 | 7333 } |
| 7334 | |
| 7335 GaimGtkConversation * | |
| 7336 gaim_gtk_conv_window_get_active_gtkconv(const GaimGtkWindow *win) | |
| 7337 { | |
| 7338 int index; | |
| 7339 GtkWidget *tab_cont; | |
| 7340 | |
| 7341 index = gtk_notebook_get_current_page(GTK_NOTEBOOK(win->notebook)); | |
| 7342 if (index == -1) | |
| 7343 index = 0; | |
| 7344 tab_cont = gtk_notebook_get_nth_page(GTK_NOTEBOOK(win->notebook), index); | |
| 7345 if (!tab_cont) | |
| 7346 return NULL; | |
| 7347 return g_object_get_data(G_OBJECT(tab_cont), "GaimGtkConversation"); | |
| 7348 } | |
| 7349 | |
| 7350 | |
| 7351 GaimConversation * | |
| 7352 gaim_gtk_conv_window_get_active_conversation(const GaimGtkWindow *win) | |
| 7353 { | |
| 7354 GaimGtkConversation *gtkconv; | |
| 7355 | |
| 7356 gtkconv = gaim_gtk_conv_window_get_active_gtkconv(win); | |
| 7357 return gtkconv ? gtkconv->active_conv : NULL; | |
| 7358 } | |
| 7359 | |
| 7360 gboolean | |
| 7361 gaim_gtk_conv_window_is_active_conversation(const GaimConversation *conv) | |
| 7362 { | |
| 7363 return conv == gaim_gtk_conv_window_get_active_conversation(GAIM_GTK_CONVERSATION(conv)->win); | |
| 7364 } | |
| 7365 | |
| 7366 gboolean | |
| 7367 gaim_gtk_conv_window_has_focus(GaimGtkWindow *win) | |
| 7368 { | |
| 7369 gboolean has_focus = FALSE; | |
| 7370 | |
| 7371 g_object_get(G_OBJECT(win->window), "has-toplevel-focus", &has_focus, NULL); | |
| 7372 | |
| 7373 return has_focus; | |
| 7374 } | |
| 7375 | |
| 7376 GaimGtkWindow * | |
| 7377 gaim_gtk_conv_window_get_at_xy(int x, int y) | |
| 7378 { | |
| 7379 GaimGtkWindow *win; | |
| 7380 GdkWindow *gdkwin; | |
| 7381 GList *l; | |
| 7382 | |
| 7383 gdkwin = gdk_window_at_pointer(&x, &y); | |
| 7384 | |
| 7385 if (gdkwin) | |
| 7386 gdkwin = gdk_window_get_toplevel(gdkwin); | |
| 7387 | |
| 7388 for (l = gaim_gtk_conv_windows_get_list(); l != NULL; l = l->next) { | |
| 7389 win = l->data; | |
| 7390 | |
| 7391 if (gdkwin == win->window->window) | |
| 7392 return win; | |
| 7393 } | |
| 7394 | |
| 7395 return NULL; | |
| 7396 } | |
| 7397 | |
| 7398 GList * | |
| 7399 gaim_gtk_conv_window_get_gtkconvs(GaimGtkWindow *win) | |
| 7400 { | |
| 7401 return win->gtkconvs; | |
| 7402 } | |
| 7403 | |
| 7404 guint | |
| 7405 gaim_gtk_conv_window_get_gtkconv_count(GaimGtkWindow *win) | |
| 7406 { | |
| 7407 return g_list_length(win->gtkconvs); | |
| 7408 } | |
| 7409 | |
| 7410 GaimGtkWindow * | |
| 7411 gaim_gtk_conv_window_first_with_type(GaimConversationType type) | |
| 7412 { | |
| 7413 GList *wins, *convs; | |
| 7414 GaimGtkWindow *win; | |
| 7415 GaimGtkConversation *conv; | |
| 7416 | |
| 7417 if (type == GAIM_CONV_TYPE_UNKNOWN) | |
| 7418 return NULL; | |
| 7419 | |
| 7420 for (wins = gaim_gtk_conv_windows_get_list(); wins != NULL; wins = wins->next) { | |
| 7421 win = wins->data; | |
| 7422 | |
| 7423 for (convs = win->gtkconvs; | |
| 7424 convs != NULL; | |
| 7425 convs = convs->next) { | |
| 7426 | |
| 7427 conv = convs->data; | |
| 7428 | |
| 7429 if (gaim_conversation_get_type(conv->active_conv) == type) | |
| 7430 return win; | |
| 7431 } | |
| 7432 } | |
| 7433 | |
| 7434 return NULL; | |
| 7435 } | |
| 7436 | |
| 7437 GaimGtkWindow * | |
| 7438 gaim_gtk_conv_window_last_with_type(GaimConversationType type) | |
| 7439 { | |
| 7440 GList *wins, *convs; | |
| 7441 GaimGtkWindow *win; | |
| 7442 GaimGtkConversation *conv; | |
| 7443 | |
| 7444 if (type == GAIM_CONV_TYPE_UNKNOWN) | |
| 7445 return NULL; | |
| 7446 | |
| 7447 for (wins = g_list_last(gaim_gtk_conv_windows_get_list()); | |
| 7448 wins != NULL; | |
| 7449 wins = wins->prev) { | |
| 7450 | |
| 7451 win = wins->data; | |
| 7452 | |
| 7453 for (convs = win->gtkconvs; | |
| 7454 convs != NULL; | |
| 7455 convs = convs->next) { | |
| 7456 | |
| 7457 conv = convs->data; | |
| 7458 | |
| 7459 if (gaim_conversation_get_type(conv->active_conv) == type) | |
| 7460 return win; | |
| 7461 } | |
| 7462 } | |
| 7463 | |
| 7464 return NULL; | |
| 7465 } | |
| 7466 | |
| 7467 | |
| 7468 /************************************************************************** | |
| 7469 * Conversation placement functions | |
| 7470 **************************************************************************/ | |
| 7471 typedef struct | |
| 7472 { | |
| 7473 char *id; | |
| 7474 char *name; | |
| 7475 GaimConvPlacementFunc fnc; | |
| 7476 | |
| 7477 } ConvPlacementData; | |
| 7478 | |
| 7479 static GList *conv_placement_fncs = NULL; | |
| 7480 static GaimConvPlacementFunc place_conv = NULL; | |
| 7481 | |
| 7482 /* This one places conversations in the last made window. */ | |
| 7483 static void | |
| 7484 conv_placement_last_created_win(GaimGtkConversation *conv) | |
| 7485 { | |
| 7486 GaimGtkWindow *win; | |
| 7487 | |
| 7488 GList *l = g_list_last(gaim_gtk_conv_windows_get_list()); | |
| 7489 win = l ? l->data : NULL;; | |
| 7490 | |
| 7491 if (win == NULL) { | |
| 7492 win = gaim_gtk_conv_window_new(); | |
| 7493 | |
| 7494 gaim_gtk_conv_window_add_gtkconv(win, conv); | |
| 7495 gaim_gtk_conv_window_show(win); | |
| 7496 } else { | |
| 7497 gaim_gtk_conv_window_add_gtkconv(win, conv); | |
| 7498 } | |
| 7499 } | |
| 7500 | |
| 7501 /* This one places conversations in the last made window of the same type. */ | |
| 7502 static void | |
| 7503 conv_placement_last_created_win_type(GaimGtkConversation *conv) | |
| 7504 { | |
| 7505 GaimGtkWindow *win; | |
| 7506 | |
| 7507 win = gaim_gtk_conv_window_last_with_type(gaim_conversation_get_type(conv->active_conv)); | |
| 7508 | |
| 7509 if (win == NULL) { | |
| 7510 win = gaim_gtk_conv_window_new(); | |
| 7511 | |
| 7512 gaim_gtk_conv_window_add_gtkconv(win, conv); | |
| 7513 gaim_gtk_conv_window_show(win); | |
| 7514 } else | |
| 7515 gaim_gtk_conv_window_add_gtkconv(win, conv); | |
| 7516 } | |
| 7517 | |
| 7518 /* This one places each conversation in its own window. */ | |
| 7519 static void | |
| 7520 conv_placement_new_window(GaimGtkConversation *conv) | |
| 7521 { | |
| 7522 GaimGtkWindow *win; | |
| 7523 | |
| 7524 win = gaim_gtk_conv_window_new(); | |
| 7525 | |
| 7526 gaim_gtk_conv_window_add_gtkconv(win, conv); | |
| 7527 | |
| 7528 gaim_gtk_conv_window_show(win); | |
| 7529 } | |
| 7530 | |
| 7531 static GaimGroup * | |
| 7532 conv_get_group(GaimGtkConversation *conv) | |
| 7533 { | |
| 7534 GaimGroup *group = NULL; | |
| 7535 | |
| 7536 if (gaim_conversation_get_type(conv->active_conv) == GAIM_CONV_TYPE_IM) { | |
| 7537 GaimBuddy *buddy; | |
| 7538 | |
| 7539 buddy = gaim_find_buddy(gaim_conversation_get_account(conv->active_conv), | |
| 7540 gaim_conversation_get_name(conv->active_conv)); | |
| 7541 | |
| 7542 if (buddy != NULL) | |
| 12088 | 7543 group = gaim_buddy_get_group(buddy); |
| 11581 | 7544 |
| 7545 } else if (gaim_conversation_get_type(conv->active_conv) == GAIM_CONV_TYPE_CHAT) { | |
| 7546 GaimChat *chat; | |
| 7547 | |
| 7548 chat = gaim_blist_find_chat(gaim_conversation_get_account(conv->active_conv), | |
| 7549 gaim_conversation_get_name(conv->active_conv)); | |
| 7550 | |
| 7551 if (chat != NULL) | |
| 7552 group = gaim_chat_get_group(chat); | |
| 7553 } | |
| 7554 | |
| 7555 return group; | |
| 7556 } | |
| 7557 | |
| 7558 /* | |
| 7559 * This groups things by, well, group. Buddies from groups will always be | |
| 7560 * grouped together, and a buddy from a group not belonging to any currently | |
| 7561 * open windows will get a new window. | |
| 7562 */ | |
| 7563 static void | |
| 7564 conv_placement_by_group(GaimGtkConversation *conv) | |
| 7565 { | |
| 7566 GaimConversationType type; | |
| 7567 GaimGroup *group = NULL; | |
| 7568 GList *wl, *cl; | |
| 7569 | |
| 7570 type = gaim_conversation_get_type(conv->active_conv); | |
| 7571 | |
| 7572 group = conv_get_group(conv); | |
| 7573 | |
| 7574 /* Go through the list of IMs and find one with this group. */ | |
| 7575 for (wl = gaim_gtk_conv_windows_get_list(); wl != NULL; wl = wl->next) { | |
| 7576 GaimGtkWindow *win2; | |
| 7577 GaimGtkConversation *conv2; | |
| 7578 GaimGroup *group2 = NULL; | |
| 7579 | |
| 7580 win2 = wl->data; | |
| 7581 | |
| 7582 for (cl = win2->gtkconvs; | |
| 7583 cl != NULL; | |
| 7584 cl = cl->next) { | |
| 7585 conv2 = cl->data; | |
| 7586 | |
| 7587 group2 = conv_get_group(conv2); | |
| 7588 | |
| 7589 if (group == group2) { | |
| 7590 gaim_gtk_conv_window_add_gtkconv(win2, conv); | |
| 7591 | |
| 7592 return; | |
| 7593 } | |
| 7594 } | |
| 7595 } | |
| 7596 | |
| 7597 /* Make a new window. */ | |
| 7598 conv_placement_new_window(conv); | |
| 7599 } | |
| 7600 | |
| 7601 /* This groups things by account. Otherwise, the same semantics as above */ | |
| 7602 static void | |
| 7603 conv_placement_by_account(GaimGtkConversation *conv) | |
| 7604 { | |
| 7605 GaimConversationType type; | |
| 7606 GList *wins, *convs; | |
| 7607 GaimAccount *account; | |
| 7608 | |
| 7609 account = gaim_conversation_get_account(conv->active_conv); | |
| 7610 type = gaim_conversation_get_type(conv->active_conv); | |
| 7611 | |
| 7612 /* Go through the list of IMs and find one with this group. */ | |
| 7613 for (wins = gaim_gtk_conv_windows_get_list(); wins != NULL; wins = wins->next) { | |
| 7614 GaimGtkWindow *win2; | |
| 7615 GaimGtkConversation *conv2; | |
| 7616 | |
| 7617 win2 = wins->data; | |
| 7618 | |
| 7619 for (convs = win2->gtkconvs; | |
| 7620 convs != NULL; | |
| 7621 convs = convs->next) { | |
| 7622 conv2 = convs->data; | |
| 7623 | |
| 7624 if (account == gaim_conversation_get_account(conv2->active_conv)) { | |
| 7625 gaim_gtk_conv_window_add_gtkconv(win2, conv); | |
| 7626 return; | |
| 7627 } | |
| 7628 } | |
| 7629 } | |
| 7630 | |
| 7631 /* Make a new window. */ | |
| 7632 conv_placement_new_window(conv); | |
| 7633 } | |
| 7634 | |
| 7635 static ConvPlacementData * | |
| 7636 get_conv_placement_data(const char *id) | |
| 7637 { | |
| 7638 ConvPlacementData *data = NULL; | |
| 7639 GList *n; | |
| 7640 | |
| 7641 for (n = conv_placement_fncs; n; n = n->next) { | |
| 7642 data = n->data; | |
| 7643 if (!strcmp(data->id, id)) | |
| 7644 return data; | |
| 7645 } | |
| 7646 | |
| 7647 return NULL; | |
| 7648 } | |
| 7649 | |
| 7650 static void | |
| 7651 add_conv_placement_fnc(const char *id, const char *name, | |
| 7652 GaimConvPlacementFunc fnc) | |
| 7653 { | |
| 7654 ConvPlacementData *data; | |
| 7655 | |
| 7656 data = g_new(ConvPlacementData, 1); | |
| 7657 | |
| 7658 data->id = g_strdup(id); | |
| 7659 data->name = g_strdup(name); | |
| 7660 data->fnc = fnc; | |
| 7661 | |
| 7662 conv_placement_fncs = g_list_append(conv_placement_fncs, data); | |
| 7663 } | |
| 7664 | |
| 7665 static void | |
| 7666 ensure_default_funcs(void) | |
| 7667 { | |
| 7668 if (conv_placement_fncs == NULL) { | |
| 7669 add_conv_placement_fnc("last", _("Last created window"), | |
| 7670 conv_placement_last_created_win); | |
| 7671 add_conv_placement_fnc("im_chat", _("Separate IM and Chat windows"), | |
| 7672 conv_placement_last_created_win_type); | |
| 7673 add_conv_placement_fnc("new", _("New window"), | |
| 7674 conv_placement_new_window); | |
| 7675 add_conv_placement_fnc("group", _("By group"), | |
| 7676 conv_placement_by_group); | |
| 7677 add_conv_placement_fnc("account", _("By account"), | |
| 7678 conv_placement_by_account); | |
| 7679 } | |
| 7680 } | |
| 7681 | |
| 7682 GList * | |
| 7683 gaim_gtkconv_placement_get_options(void) | |
| 7684 { | |
| 7685 GList *n, *list = NULL; | |
| 7686 ConvPlacementData *data; | |
| 7687 | |
| 7688 ensure_default_funcs(); | |
| 7689 | |
| 7690 for (n = conv_placement_fncs; n; n = n->next) { | |
| 7691 data = n->data; | |
| 7692 list = g_list_append(list, data->name); | |
| 7693 list = g_list_append(list, data->id); | |
| 7694 } | |
| 7695 | |
| 7696 return list; | |
| 7697 } | |
| 7698 | |
| 7699 | |
| 7700 void | |
| 7701 gaim_gtkconv_placement_add_fnc(const char *id, const char *name, | |
| 7702 GaimConvPlacementFunc fnc) | |
| 7703 { | |
| 7704 g_return_if_fail(id != NULL); | |
| 7705 g_return_if_fail(name != NULL); | |
| 7706 g_return_if_fail(fnc != NULL); | |
| 7707 | |
| 7708 ensure_default_funcs(); | |
| 7709 | |
| 7710 add_conv_placement_fnc(id, name, fnc); | |
| 7711 } | |
| 7712 | |
| 7713 void | |
| 7714 gaim_gtkconv_placement_remove_fnc(const char *id) | |
| 7715 { | |
| 7716 ConvPlacementData *data = get_conv_placement_data(id); | |
| 7717 | |
| 7718 if (data == NULL) | |
| 7719 return; | |
| 7720 | |
| 7721 conv_placement_fncs = g_list_remove(conv_placement_fncs, data); | |
| 7722 | |
| 7723 g_free(data->id); | |
| 7724 g_free(data->name); | |
| 7725 g_free(data); | |
| 7726 } | |
| 7727 | |
| 7728 const char * | |
| 7729 gaim_gtkconv_placement_get_name(const char *id) | |
| 7730 { | |
| 7731 ConvPlacementData *data; | |
| 7732 | |
| 7733 ensure_default_funcs(); | |
| 7734 | |
| 7735 data = get_conv_placement_data(id); | |
| 7736 | |
| 7737 if (data == NULL) | |
| 7738 return NULL; | |
| 7739 | |
| 7740 return data->name; | |
| 7741 } | |
| 7742 | |
| 7743 GaimConvPlacementFunc | |
| 7744 gaim_gtkconv_placement_get_fnc(const char *id) | |
| 7745 { | |
| 7746 ConvPlacementData *data; | |
| 7747 | |
| 7748 ensure_default_funcs(); | |
| 7749 | |
| 7750 data = get_conv_placement_data(id); | |
| 7751 | |
| 7752 if (data == NULL) | |
| 7753 return NULL; | |
| 7754 | |
| 7755 return data->fnc; | |
| 7756 } | |
| 7757 | |
| 7758 void | |
| 7759 gaim_gtkconv_placement_set_current_func(GaimConvPlacementFunc func) | |
| 7760 { | |
| 7761 g_return_if_fail(func != NULL); | |
| 7762 | |
|
11936
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7763 /* If tabs are enabled, set the function, otherwise, NULL it out. */ |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7764 if (gaim_prefs_get_bool("/gaim/gtk/conversations/tabs")) |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7765 place_conv = func; |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7766 else |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7767 place_conv = NULL; |
| 11581 | 7768 } |
| 7769 | |
| 7770 GaimConvPlacementFunc | |
| 7771 gaim_gtkconv_placement_get_current_func(void) | |
| 7772 { | |
| 7773 return place_conv; | |
| 7774 } | |
| 7775 | |
| 7776 void | |
| 7777 gaim_gtkconv_placement_place(GaimGtkConversation *gtkconv) | |
| 7778 { | |
| 7779 if (place_conv) | |
| 7780 place_conv(gtkconv); | |
|
11936
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7781 else |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7782 conv_placement_new_window(gtkconv); |
|
2af814f836e6
[gaim-migrate @ 14227]
Gary Kramlich <grim@reaperworld.com>
parents:
11911
diff
changeset
|
7783 } |
| 12239 | 7784 |
| 7785 gboolean | |
| 7786 gaim_gtkconv_is_hidden(GaimGtkConversation *gtkconv) | |
| 7787 { | |
| 7788 g_return_val_if_fail(gtkconv != NULL, FALSE); | |
| 7789 | |
| 7790 return (gtkconv->win == hidden_convwin); | |
| 7791 } | |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7792 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7793 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7794 /* Algorithm from http://www.w3.org/TR/AERT#color-contrast */ |
|
12351
af152afe7bac
[gaim-migrate @ 14655]
Richard Laager <rlaager@wiktel.com>
parents:
12346
diff
changeset
|
7795 static gboolean |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7796 color_is_visible(GdkColor foreground, GdkColor background, int color_contrast, int brightness_contrast) |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7797 { |
|
12346
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7798 gulong fg_brightness; |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7799 gulong bg_brightness; |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7800 gulong br_diff; |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7801 gulong col_diff; |
|
12352
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7802 int fred, fgreen, fblue, bred, bgreen, bblue; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7803 |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7804 /* this algorithm expects colors between 0 and 255 for each of red green and blue. |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7805 * GTK on the other hand has values between 0 and 65535 |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7806 * Err suggested I >> 8, which grabbed the high bits. |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7807 */ |
|
12360
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7808 |
|
12352
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7809 fred = foreground.red >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7810 fgreen = foreground.green >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7811 fblue = foreground.blue >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7812 |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7813 |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7814 bred = background.red >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7815 bgreen = background.green >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7816 bblue = background.blue >> 8 ; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7817 |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7818 fg_brightness = (fred * 299 + fgreen * 587 + fblue * 114) / 1000; |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7819 bg_brightness = (bred * 299 + bgreen * 587 + bblue * 114) / 1000; |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7820 br_diff = abs(fg_brightness - bg_brightness); |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7821 |
|
12352
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7822 col_diff = abs(fred - bred) + abs(fgreen - bgreen) + abs(fblue - bblue); |
|
e3fefd3ebc72
[gaim-migrate @ 14656]
Luke Schierer <lschiere@pidgin.im>
parents:
12351
diff
changeset
|
7823 |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7824 return ((col_diff > color_contrast) && (br_diff > brightness_contrast)); |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7825 } |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7826 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7827 |
|
12351
af152afe7bac
[gaim-migrate @ 14655]
Richard Laager <rlaager@wiktel.com>
parents:
12346
diff
changeset
|
7828 static GdkColor* |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7829 generate_nick_colors(guint numcolors, GdkColor background) |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7830 { |
|
12363
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7831 guint i = 0, j = 0; |
|
12346
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7832 GdkColor *colors = g_new(GdkColor, numcolors); |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7833 GdkColor nick_highlight; |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7834 GdkColor send_color; |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7835 |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7836 gdk_color_parse(HIGHLIGHT_COLOR, &nick_highlight); |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7837 gdk_color_parse(SEND_COLOR, &send_color); |
|
12346
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7838 |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7839 srand(background.red + background.green + background.blue + 1); |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7840 |
|
12363
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7841 /* first we look through the list of "good" colors: colors that differ from every other color in the |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7842 * list. only some of them will differ from the background color though. lets see if we can find |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7843 * numcolors of them that do |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7844 */ |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7845 while (i < numcolors && j < NUM_NICK_SEED_COLORS ) |
|
12360
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7846 { |
|
12363
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7847 GdkColor color = nick_seed_colors[j]; |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7848 |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7849 gaim_debug(GAIM_DEBUG_INFO, NULL, |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7850 "Looking for colors from safe list, I have found %i so far.\n",i); |
|
12360
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7851 |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7852 if (color_is_visible(color, background, MIN_COLOR_CONTRAST, MIN_BRIGHTNESS_CONTRAST) && |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7853 color_is_visible(color, nick_highlight, MIN_COLOR_CONTRAST / 2, 0) && |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7854 color_is_visible(color, send_color, MIN_COLOR_CONTRAST / 4, 0)) |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7855 { |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7856 colors[i] = color; |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7857 i++; |
|
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7858 } |
|
12363
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7859 j++; |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7860 } |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7861 |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7862 /* we might not have found numcolors in the last loop. if we did, we'll never enter this one. |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7863 * if we did not, lets just find some colors that don't conflict with the background. its |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7864 * expensive to find colors that not only don't conflict with the background, but also do not |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7865 * conflict with each other. |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7866 */ |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7867 while(i < numcolors ) |
|
12346
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7868 { |
|
f81d458aba18
[gaim-migrate @ 14650]
Richard Laager <rlaager@wiktel.com>
parents:
12345
diff
changeset
|
7869 GdkColor color = { 0, rand() % 65536, rand() % 65536, rand() % 65536 }; |
|
12360
3153661f4d5c
[gaim-migrate @ 14664]
Luke Schierer <lschiere@pidgin.im>
parents:
12359
diff
changeset
|
7870 |
|
12363
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7871 gaim_debug(GAIM_DEBUG_WARNING, NULL, |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7872 "Looking for random colors to fill the list, I have found %i so far.\n",i); |
|
f758af0373cb
[gaim-migrate @ 14667]
Luke Schierer <lschiere@pidgin.im>
parents:
12360
diff
changeset
|
7873 |
|
12356
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7874 if (color_is_visible(color, background, MIN_COLOR_CONTRAST, MIN_BRIGHTNESS_CONTRAST) && |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7875 color_is_visible(color, nick_highlight, MIN_COLOR_CONTRAST / 2, 0) && |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7876 color_is_visible(color, send_color, MIN_COLOR_CONTRAST / 4, 0)) |
|
4b8c20fcecd6
[gaim-migrate @ 14660]
Richard Laager <rlaager@wiktel.com>
parents:
12354
diff
changeset
|
7877 { |
|
12345
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7878 colors[i] = color; |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7879 i++; |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7880 } |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7881 } |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7882 |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7883 return colors; |
|
f6fa5d742c76
[gaim-migrate @ 14649]
Luke Schierer <lschiere@pidgin.im>
parents:
12335
diff
changeset
|
7884 } |
