pidgin/gtkutils.c

Sun, 28 Jan 2007 21:40:07 +0000

author
Sean Egan <seanegan@pidgin.im>
date
Sun, 28 Jan 2007 21:40:07 +0000
changeset 15506
03be1365a163
parent 15497
92f02f4bd5ee
child 15562
8c8249fe5e3c
permissions
-rw-r--r--

GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it

5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1 /**
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2 * @file gtkutils.c GTK+ utility functions
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
3 * @ingroup gtkui
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
4 *
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * gaim
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
9 * source distribution.
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 6846
diff changeset
10 *
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * (at your option) any later version.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * GNU General Public License for more details.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 */
9791
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9767
diff changeset
25 #include "internal.h"
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9767
diff changeset
26 #include "gtkgaim.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
27
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 #ifndef _WIN32
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
29 # include <X11/Xlib.h>
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 #else
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
31 # ifdef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
32 # undef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
33 # endif
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #endif /*_WIN32*/
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
35
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
36 #ifdef USE_GTKSPELL
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
37 # include <gtkspell/gtkspell.h>
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
38 # ifdef _WIN32
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
39 # include "wspell.h"
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
40 # endif
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
41 #endif
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
42
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 #include <gdk/gdkkeysyms.h>
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
44
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
45 #include "conversation.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
46 #include "debug.h"
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
47 #include "desktopitem.h"
7078
0d63d673f170 [gaim-migrate @ 7643]
Nathan Walp <nwalp@pidgin.im>
parents: 7060
diff changeset
48 #include "imgstore.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
49 #include "notify.h"
5548
200682124464 [gaim-migrate @ 5949]
Nathan Walp <nwalp@pidgin.im>
parents: 5530
diff changeset
50 #include "prefs.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 #include "prpl.h"
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
52 #include "request.h"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
53 #include "signals.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
54 #include "util.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
55
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
56 #include "gtkconv.h"
9709
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9706
diff changeset
57 #include "gtkdialogs.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
58 #include "gtkimhtml.h"
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
59 #include "gtkimhtmltoolbar.h"
14253
b63ebf84c42b This is a hand-crafted commit to migrate across subversion revisions
Ethan Blanton <elb@pidgin.im>
parents: 14206
diff changeset
60 #include "gaimstock.h"
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
61 #include "gtkthemes.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
62 #include "gtkutils.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
64 static guint accels_save_timer = 0;
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
65
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
66 static gboolean
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
67 url_clicked_idle_cb(gpointer data)
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
68 {
10240
09342bc554d9 [gaim-migrate @ 11377]
Herman Bloggs <herman@bluedigits.com>
parents: 10229
diff changeset
69 gaim_notify_uri(NULL, data);
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
70 g_free(data);
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
71 return FALSE;
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
72 }
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
73
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
74 static void
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
75 url_clicked_cb(GtkWidget *w, const char *uri)
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
76 {
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
77 g_idle_add(url_clicked_idle_cb, g_strdup(uri));
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
78 }
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
79
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10850
diff changeset
80 static GtkIMHtmlFuncs gtkimhtml_cbs = {
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
81 (GtkIMHtmlGetImageFunc)gaim_imgstore_get,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
82 (GtkIMHtmlGetImageDataFunc)gaim_imgstore_get_data,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
83 (GtkIMHtmlGetImageSizeFunc)gaim_imgstore_get_size,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
84 (GtkIMHtmlGetImageFilenameFunc)gaim_imgstore_get_filename,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
85 gaim_imgstore_ref,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
86 gaim_imgstore_unref,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
87 };
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
88
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89 void
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 gaim_setup_imhtml(GtkWidget *imhtml)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 g_return_if_fail(imhtml != NULL);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 g_return_if_fail(GTK_IS_IMHTML(imhtml));
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 g_signal_connect(G_OBJECT(imhtml), "url_clicked",
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
96 G_CALLBACK(url_clicked_cb), NULL);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
98 gaim_gtkthemes_smiley_themeize(imhtml);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
99
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
100 gtk_imhtml_set_funcs(GTK_IMHTML(imhtml), &gtkimhtml_cbs);
15506
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
101
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
102 /* Use the GNOME "document" font, if applicable */
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
103 if (gaim_running_gnome()) {
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
104 char *path, *font;
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
105 PangoFontDescription *desc = NULL;
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
106
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
107 if ((path = g_find_program_in_path("gconftool-2"))) {
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
108 g_free(path);
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
109 if (!g_spawn_command_line_sync(
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
110 "gconftool-2 -g /desktop/gnome/interface/document_font_name",
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
111 &font, NULL, NULL, NULL))
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
112 return;
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
113 }
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
114 desc = pango_font_description_from_string(font);
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
115 g_free(font);
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
116
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
117 if (desc) {
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
118 gtk_widget_modify_font(imhtml, desc);
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
119 pango_font_description_free(desc);
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
120 }
03be1365a163 GNOME has a 'document font' setting that we should use when running on GNOME. This does the gconftool-2 spawning trick to get it
Sean Egan <seanegan@pidgin.im>
parents: 15497
diff changeset
121 }
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
124 GtkWidget *
13281
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
125 gaim_gtk_create_imhtml(gboolean editable, GtkWidget **imhtml_ret, GtkWidget **toolbar_ret, GtkWidget **sw_ret)
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
126 {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
127 GtkWidget *frame;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
128 GtkWidget *imhtml;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
129 GtkWidget *sep;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
130 GtkWidget *sw;
10177
9471d38bd527 [gaim-migrate @ 11292]
Christian Hammond <chipx86@chipx86.com>
parents: 10175
diff changeset
131 GtkWidget *toolbar = NULL;
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
132 GtkWidget *vbox;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
133
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
134 frame = gtk_frame_new(NULL);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
135 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
136
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
137 vbox = gtk_vbox_new(FALSE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
138 gtk_container_add(GTK_CONTAINER(frame), vbox);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
139 gtk_widget_show(vbox);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
140
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
141 if (editable) {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
142 toolbar = gtk_imhtmltoolbar_new();
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
143 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
144 gtk_widget_show(toolbar);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
145
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
146 sep = gtk_hseparator_new();
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
147 gtk_box_pack_start(GTK_BOX(vbox), sep, FALSE, FALSE, 0);
14607
fd7b88ef59c0 [gaim-migrate @ 17266]
Sean Egan <seanegan@pidgin.im>
parents: 14290
diff changeset
148 g_signal_connect_swapped(G_OBJECT(toolbar), "show", G_CALLBACK(gtk_widget_show), sep);
fd7b88ef59c0 [gaim-migrate @ 17266]
Sean Egan <seanegan@pidgin.im>
parents: 14290
diff changeset
149 g_signal_connect_swapped(G_OBJECT(toolbar), "hide", G_CALLBACK(gtk_widget_hide), sep);
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
150 gtk_widget_show(sep);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
151 }
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
152
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
153 sw = gtk_scrolled_window_new(NULL, NULL);
13203
bdb98c8e5b56 [gaim-migrate @ 15565]
Mark Doliner <markdoliner@pidgin.im>
parents: 13114
diff changeset
154 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
bdb98c8e5b56 [gaim-migrate @ 15565]
Mark Doliner <markdoliner@pidgin.im>
parents: 13114
diff changeset
155 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
156 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
157 gtk_widget_show(sw);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
158
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
159 imhtml = gtk_imhtml_new(NULL, NULL);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
160 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
161 gtk_imhtml_set_format_functions(GTK_IMHTML(imhtml), GTK_IMHTML_ALL ^ GTK_IMHTML_IMAGE);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
162 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD_CHAR);
12651
be8208c28eaa [gaim-migrate @ 14992]
Mark Doliner <markdoliner@pidgin.im>
parents: 12595
diff changeset
163 #ifdef USE_GTKSPELL
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
164 if (editable && gaim_prefs_get_bool("/gaim/gtk/conversations/spellcheck"))
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
165 gaim_gtk_setup_gtkspell(GTK_TEXT_VIEW(imhtml));
12651
be8208c28eaa [gaim-migrate @ 14992]
Mark Doliner <markdoliner@pidgin.im>
parents: 12595
diff changeset
166 #endif
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
167 gtk_widget_show(imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
168
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
169 if (editable) {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
170 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
171 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
172 }
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
173 gaim_setup_imhtml(imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
174
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
175 gtk_container_add(GTK_CONTAINER(sw), imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
176
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
177 if (imhtml_ret != NULL)
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
178 *imhtml_ret = imhtml;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
179
10181
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10177
diff changeset
180 if (editable && (toolbar_ret != NULL))
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
181 *toolbar_ret = toolbar;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
182
13281
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
183 if (sw_ret != NULL)
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
184 *sw_ret = sw;
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
185
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
186 return frame;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
187 }
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
188
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 void
7751
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
190 gaim_gtk_set_sensitive_if_input(GtkWidget *entry, GtkWidget *dialog)
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
191 {
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
192 const char *text = gtk_entry_get_text(GTK_ENTRY(entry));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
193 gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
194 (*text != '\0'));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
195 }
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
196
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 void
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198 gaim_gtk_toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
200 gboolean sensitivity;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
201
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202 if (to_toggle == NULL)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 return;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 sensitivity = GTK_WIDGET_IS_SENSITIVE(to_toggle);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207 gtk_widget_set_sensitive(to_toggle, !sensitivity);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
210 void
10590
46b2072e825d [gaim-migrate @ 11995]
Etan Reisner <deryni@pidgin.im>
parents: 10566
diff changeset
211 gaim_gtk_toggle_sensitive_array(GtkWidget *w, GPtrArray *data)
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
212 {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
213 gboolean sensitivity;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
214 gpointer element;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
215 int i;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
216
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
217 for (i=0; i < data->len; i++) {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
218 element = g_ptr_array_index(data,i);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
219 if (element == NULL)
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
220 continue;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
221
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
222 sensitivity = GTK_WIDGET_IS_SENSITIVE(element);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
223
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
224 gtk_widget_set_sensitive(element, !sensitivity);
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
225 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
226 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
227
8901
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
228 void
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
229 gaim_gtk_toggle_showhide(GtkWidget *widget, GtkWidget *to_toggle)
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
230 {
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
231 if (to_toggle == NULL)
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
232 return;
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
233
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
234 if (GTK_WIDGET_VISIBLE(to_toggle))
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
235 gtk_widget_hide(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
236 else
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
237 gtk_widget_show(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
238 }
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
239
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
240 void gaim_separator(GtkWidget *menu)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
241 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
242 GtkWidget *menuitem;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
243
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
244 menuitem = gtk_separator_menu_item_new();
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
245 gtk_widget_show(menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
246 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
247 }
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
248
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
249 GtkWidget *gaim_new_item(GtkWidget *menu, const char *str)
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
250 {
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
251 GtkWidget *menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
252 GtkWidget *label;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
253
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
254 menuitem = gtk_menu_item_new();
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
255 if (menu)
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
256 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
257 gtk_widget_show(menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
258
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
259 label = gtk_label_new(str);
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6236
diff changeset
260 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
261 gtk_label_set_pattern(GTK_LABEL(label), "_");
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
262 gtk_container_add(GTK_CONTAINER(menuitem), label);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
263 gtk_widget_show(label);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
264 /* FIXME: Go back and fix this
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
265 gtk_widget_add_accelerator(menuitem, "activate", accel, str[0],
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
266 GDK_MOD1_MASK, GTK_ACCEL_LOCKED);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
267 */
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
268 gaim_set_accessible_label (menuitem, label);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
269 return menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
270 }
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
271
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
272 GtkWidget *gaim_new_check_item(GtkWidget *menu, const char *str,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
273 GtkSignalFunc sf, gpointer data, gboolean checked)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
274 {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
275 GtkWidget *menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
276 menuitem = gtk_check_menu_item_new_with_mnemonic(str);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
277
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
278 if (menu)
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
279 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
280
7299
4c804d9a52f1 [gaim-migrate @ 7883]
Christian Hammond <chipx86@chipx86.com>
parents: 7118
diff changeset
281 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), checked);
4c804d9a52f1 [gaim-migrate @ 7883]
Christian Hammond <chipx86@chipx86.com>
parents: 7118
diff changeset
282
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
283 if (sf)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
284 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
285
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
286 gtk_widget_show_all(menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
287
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
288 return menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
289 }
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
290
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
291 GtkWidget *
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
292 gaim_pixbuf_toolbar_button_from_stock(const char *icon)
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
293 {
9706
d5b657fe9cff [gaim-migrate @ 10567]
Mark Doliner <markdoliner@pidgin.im>
parents: 9534
diff changeset
294 GtkWidget *button, *image, *bbox;
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
295
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
296 button = gtk_toggle_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
297 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
298
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
299 bbox = gtk_vbox_new(FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
300
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
301 gtk_container_add (GTK_CONTAINER(button), bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
302
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
303 image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_MENU);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
304 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
305
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
306 gtk_widget_show_all(bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
307
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
308 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
309 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
310
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
311 GtkWidget *
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
312 gaim_pixbuf_button_from_stock(const char *text, const char *icon,
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
313 GaimButtonOrientation style)
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
314 {
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
315 GtkWidget *button, *image, *label, *bbox, *ibox, *lbox = NULL;
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
316
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
317 button = gtk_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
318
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
319 if (style == GAIM_BUTTON_HORIZONTAL) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
320 bbox = gtk_hbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
321 ibox = gtk_hbox_new(FALSE, 0);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
322 if (text)
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
323 lbox = gtk_hbox_new(FALSE, 0);
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
324 } else {
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
325 bbox = gtk_vbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
326 ibox = gtk_vbox_new(FALSE, 0);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
327 if (text)
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
328 lbox = gtk_vbox_new(FALSE, 0);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
329 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
330
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
331 gtk_container_add(GTK_CONTAINER(button), bbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
332
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
333 if (icon) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
334 gtk_box_pack_start_defaults(GTK_BOX(bbox), ibox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
335 image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_BUTTON);
9767
c68cfe03deec [gaim-migrate @ 10635]
Mark Doliner <markdoliner@pidgin.im>
parents: 9750
diff changeset
336 gtk_box_pack_end(GTK_BOX(ibox), image, FALSE, TRUE, 0);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
337 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
338
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
339 if (text) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
340 gtk_box_pack_start_defaults(GTK_BOX(bbox), lbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
341 label = gtk_label_new(NULL);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
342 gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
343 gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
9767
c68cfe03deec [gaim-migrate @ 10635]
Mark Doliner <markdoliner@pidgin.im>
parents: 9750
diff changeset
344 gtk_box_pack_start(GTK_BOX(lbox), label, FALSE, TRUE, 0);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
345 gaim_set_accessible_label (button, label);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
346 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
347
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
348 gtk_widget_show_all(bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
349
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
350 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
351 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
352
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
353
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
354 GtkWidget *gaim_new_item_from_stock(GtkWidget *menu, const char *str, const char *icon, GtkSignalFunc sf, gpointer data, guint accel_key, guint accel_mods, char *mod)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
355 {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
356 GtkWidget *menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
357 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
358 GtkWidget *hbox;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
359 GtkWidget *label;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
360 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
361 GtkWidget *image;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
362
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
363 if (icon == NULL)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
364 menuitem = gtk_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
365 else
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
366 menuitem = gtk_image_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
367
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
368 if (menu)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
369 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
370
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
371 if (sf)
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
372 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
373
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
374 if (icon != NULL) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
375 image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_MENU);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
376 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuitem), image);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
377 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
378 /* FIXME: this isn't right
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
379 if (mod) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
380 label = gtk_label_new(mod);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
381 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
382 gtk_widget_show(label);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
383 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
384 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
385 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
386 if (accel_key) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
387 gtk_widget_add_accelerator(menuitem, "activate", accel, accel_key,
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
388 accel_mods, GTK_ACCEL_LOCKED);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
389 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
390 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
391
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
392 gtk_widget_show_all(menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
393
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
394 return menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
395 }
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
396
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
397 GtkWidget *
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
398 gaim_gtk_make_frame(GtkWidget *parent, const char *title)
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
399 {
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
400 GtkWidget *vbox, *label, *hbox;
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
401 char *labeltitle;
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
402
11243
ee8dccc558e1 [gaim-migrate @ 13408]
Mads Chr. Olesen <mads@mchro.dk>
parents: 11135
diff changeset
403 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
404 gtk_box_pack_start(GTK_BOX(parent), vbox, FALSE, FALSE, 0);
5641
a9d1f7917dd4 [gaim-migrate @ 6054]
Christian Hammond <chipx86@chipx86.com>
parents: 5554
diff changeset
405 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
406
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
407 label = gtk_label_new(NULL);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
408
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
409 labeltitle = g_strdup_printf("<span weight=\"bold\">%s</span>", title);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
410 gtk_label_set_markup(GTK_LABEL(label), labeltitle);
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
411 g_free(labeltitle);
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
412
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
413 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
414 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
5641
a9d1f7917dd4 [gaim-migrate @ 6054]
Christian Hammond <chipx86@chipx86.com>
parents: 5554
diff changeset
415 gtk_widget_show(label);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
416 gaim_set_accessible_label (vbox, label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
417
11243
ee8dccc558e1 [gaim-migrate @ 13408]
Mads Chr. Olesen <mads@mchro.dk>
parents: 11135
diff changeset
418 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
419 gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
5641
a9d1f7917dd4 [gaim-migrate @ 6054]
Christian Hammond <chipx86@chipx86.com>
parents: 5554
diff changeset
420 gtk_widget_show(hbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
421
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
422 label = gtk_label_new(" ");
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
423 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
5641
a9d1f7917dd4 [gaim-migrate @ 6054]
Christian Hammond <chipx86@chipx86.com>
parents: 5554
diff changeset
424 gtk_widget_show(label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
425
11243
ee8dccc558e1 [gaim-migrate @ 13408]
Mads Chr. Olesen <mads@mchro.dk>
parents: 11135
diff changeset
426 vbox = gtk_vbox_new(FALSE, GAIM_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
427 gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
5641
a9d1f7917dd4 [gaim-migrate @ 6054]
Christian Hammond <chipx86@chipx86.com>
parents: 5554
diff changeset
428 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
429
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
430 return vbox;
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
431 }
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
432
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
433 static void
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
434 protocol_menu_cb(GtkWidget *optmenu, GCallback cb)
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
435 {
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
436 GtkWidget *menu;
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
437 GtkWidget *item;
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
438 const char *protocol;
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
439 gpointer user_data;
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
440
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
441 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
442 item = gtk_menu_get_active(GTK_MENU(menu));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
443
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
444 protocol = g_object_get_data(G_OBJECT(item), "protocol");
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
445 user_data = (g_object_get_data(G_OBJECT(optmenu), "user_data"));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
446
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
447 if (cb != NULL)
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
448 ((void (*)(GtkWidget *, const char *, gpointer))cb)(item, protocol,
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
449 user_data);
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
450 }
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
451
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
452 GtkWidget *
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
453 gaim_gtk_protocol_option_menu_new(const char *id, GCallback cb,
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
454 gpointer user_data)
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
455 {
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
456 GaimPluginProtocolInfo *prpl_info;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
457 GaimPlugin *plugin;
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
458 GtkWidget *hbox;
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
459 GtkWidget *label;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
460 GtkWidget *optmenu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
461 GtkWidget *menu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
462 GtkWidget *item;
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
463 GtkWidget *image;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
464 GdkPixbuf *pixbuf;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
465 GList *p;
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
466 GtkSizeGroup *sg;
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
467 char *filename;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
468 const char *proto_name;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
469 char buf[256];
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
470 int i, selected_index = -1;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
471
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
472 optmenu = gtk_option_menu_new();
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
473 gtk_widget_show(optmenu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
474
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
475 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
476
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
477 menu = gtk_menu_new();
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
478 gtk_widget_show(menu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
479
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
480 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
481
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
482 for (p = gaim_plugins_get_protocols(), i = 0;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
483 p != NULL;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
484 p = p->next, i++) {
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
485
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
486 plugin = (GaimPlugin *)p->data;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
487 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
488
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
489 /* Create the item. */
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
490 item = gtk_menu_item_new();
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
491
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
492 /* Create the hbox. */
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
493 hbox = gtk_hbox_new(FALSE, 4);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
494 gtk_container_add(GTK_CONTAINER(item), hbox);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
495 gtk_widget_show(hbox);
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
496
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
497 /* Load the image. */
6430
cadc91a19d10 [gaim-migrate @ 6938]
Sean Egan <seanegan@pidgin.im>
parents: 6429
diff changeset
498 proto_name = prpl_info->list_icon(NULL, NULL);
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
499 g_snprintf(buf, sizeof(buf), "%s.png", proto_name);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
500
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
501 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
502 "16", buf, NULL);
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
503 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
504 g_free(filename);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
505
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
506 if (pixbuf) {
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
507 image = gtk_image_new_from_pixbuf(pixbuf);
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
508
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
509 g_object_unref(G_OBJECT(pixbuf));
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
510 }
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
511 else
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
512 image = gtk_image_new();
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
513
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
514 gtk_size_group_add_widget(sg, image);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
515
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
516 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
517 gtk_widget_show(image);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
518
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
519 /* Create the label. */
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
520 label = gtk_label_new(plugin->info->name);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
521 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
522 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
523 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
524 gtk_widget_show(label);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
525
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
526 g_object_set_data(G_OBJECT(item), "protocol", plugin->info->id);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
527
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
528 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
529 gtk_widget_show(item);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
530 gaim_set_accessible_label (item, label);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
531
8218
0ff223f56a67 [gaim-migrate @ 8941]
Christian Hammond <chipx86@chipx86.com>
parents: 8215
diff changeset
532 if (id != NULL && !strcmp(plugin->info->id, id))
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
533 selected_index = i;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
534 }
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
535
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
536 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
537
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
538 if (selected_index != -1)
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
539 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), selected_index);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
540
5688
c185c90d9811 [gaim-migrate @ 6109]
Christian Hammond <chipx86@chipx86.com>
parents: 5676
diff changeset
541 g_signal_connect(G_OBJECT(optmenu), "changed",
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
542 G_CALLBACK(protocol_menu_cb), cb);
5688
c185c90d9811 [gaim-migrate @ 6109]
Christian Hammond <chipx86@chipx86.com>
parents: 5676
diff changeset
543
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
544 g_object_unref(sg);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
545
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
546 return optmenu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
547 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
548
8940
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
549 GaimAccount *
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
550 gaim_gtk_account_option_menu_get_selected(GtkWidget *optmenu)
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
551 {
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
552 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
553 GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu));
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
554 return g_object_get_data(G_OBJECT(item), "account");
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
555 }
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
556
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
557 static void
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
558 account_menu_cb(GtkWidget *optmenu, GCallback cb)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
559 {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
560 GtkWidget *menu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
561 GtkWidget *item;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
562 GaimAccount *account;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
563 gpointer user_data;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
564
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
565 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
566 item = gtk_menu_get_active(GTK_MENU(menu));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
567
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
568 account = g_object_get_data(G_OBJECT(item), "account");
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
569 user_data = g_object_get_data(G_OBJECT(optmenu), "user_data");
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
570
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
571 if (cb != NULL)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
572 ((void (*)(GtkWidget *, GaimAccount *, gpointer))cb)(item, account,
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
573 user_data);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
574 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
575
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
576 static void
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
577 create_account_menu(GtkWidget *optmenu, GaimAccount *default_account,
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
578 GaimFilterAccountFunc filter_func, gboolean show_all)
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
579 {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
580 GaimAccount *account;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
581 GtkWidget *menu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
582 GtkWidget *item;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
583 GtkWidget *image;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
584 GtkWidget *hbox;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
585 GtkWidget *label;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
586 GdkPixbuf *pixbuf;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
587 GList *list;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
588 GList *p;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
589 GtkSizeGroup *sg;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
590 char *filename;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
591 const char *proto_name;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
592 char buf[256];
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
593 int i, selected_index = -1;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
594
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
595 if (show_all)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
596 list = gaim_accounts_get_all();
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
597 else
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
598 list = gaim_connections_get_all();
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
599
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
600 menu = gtk_menu_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
601 gtk_widget_show(menu);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
602
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
603 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
604
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
605 for (p = list, i = 0; p != NULL; p = p->next, i++) {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
606 GaimPluginProtocolInfo *prpl_info = NULL;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
607 GaimPlugin *plugin;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
608
5879
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
609 if (show_all)
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
610 account = (GaimAccount *)p->data;
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
611 else {
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
612 GaimConnection *gc = (GaimConnection *)p->data;
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
613
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
614 account = gaim_connection_get_account(gc);
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
615 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
616
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
617 if (filter_func && !filter_func(account)) {
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
618 i--;
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
619 continue;
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
620 }
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
621
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
622 plugin = gaim_find_prpl(gaim_account_get_protocol_id(account));
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
623
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
624 if (plugin != NULL)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
625 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
626
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
627 /* Create the item. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
628 item = gtk_menu_item_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
629
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
630 /* Create the hbox. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
631 hbox = gtk_hbox_new(FALSE, 4);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
632 gtk_container_add(GTK_CONTAINER(item), hbox);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
633 gtk_widget_show(hbox);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
634
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
635 /* Load the image. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
636 if (prpl_info != NULL) {
6430
cadc91a19d10 [gaim-migrate @ 6938]
Sean Egan <seanegan@pidgin.im>
parents: 6429
diff changeset
637 proto_name = prpl_info->list_icon(account, NULL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
638 g_snprintf(buf, sizeof(buf), "%s.png", proto_name);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
639
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
640 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
641 "16", buf, NULL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
642 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
643 g_free(filename);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
644
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
645 if (pixbuf != NULL) {
11251
e38d86958a63 [gaim-migrate @ 13420]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 11243
diff changeset
646 if (gaim_account_is_disconnected(account) && show_all &&
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
647 gaim_connections_get_all())
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
648 gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf, 0.0, FALSE);
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
649
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
650 image = gtk_image_new_from_pixbuf(pixbuf);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
651
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
652 g_object_unref(G_OBJECT(pixbuf));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
653 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
654 else
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
655 image = gtk_image_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
656 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
657 else
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
658 image = gtk_image_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
659
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
660 gtk_size_group_add_widget(sg, image);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
661
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
662 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
663 gtk_widget_show(image);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
664
11017
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
665 if (gaim_account_get_alias(account)) {
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
666 g_snprintf(buf, sizeof(buf), "%s (%s) (%s)",
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
667 gaim_account_get_username(account),
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
668 gaim_account_get_alias(account),
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
669 gaim_account_get_protocol_name(account));
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
670 } else {
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
671 g_snprintf(buf, sizeof(buf), "%s (%s)",
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
672 gaim_account_get_username(account),
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
673 gaim_account_get_protocol_name(account));
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
674 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
675
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
676 /* Create the label. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
677 label = gtk_label_new(buf);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
678 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
679 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
680 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
681 gtk_widget_show(label);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
682
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
683 g_object_set_data(G_OBJECT(item), "account", account);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
684
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
685 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
686 gtk_widget_show(item);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
687 gaim_set_accessible_label (item, label);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
688
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
689 if (default_account != NULL && account == default_account)
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
690 selected_index = i;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
691 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
692
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
693 g_object_unref(sg);
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
694
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
695 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
696
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
697 /* Set the place we should be at. */
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
698 if (selected_index != -1)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
699 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), selected_index);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
700 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
701
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
702 static void
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
703 regenerate_account_menu(GtkWidget *optmenu)
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
704 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
705 GtkWidget *menu;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
706 GtkWidget *item;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
707 gboolean show_all;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
708 GaimAccount *account;
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
709 GaimFilterAccountFunc filter_func;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
710
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
711 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
712 item = gtk_menu_get_active(GTK_MENU(menu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
713 account = g_object_get_data(G_OBJECT(item), "account");
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
714
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
715 show_all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(optmenu),
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
716 "show_all"));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
717
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
718 filter_func = g_object_get_data(G_OBJECT(optmenu),
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
719 "filter_func");
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
720
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
721 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
722
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
723 create_account_menu(optmenu, account, filter_func, show_all);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
724 }
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
725
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
726 static void
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
727 account_menu_sign_on_off_cb(GaimConnection *gc, GtkWidget *optmenu)
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
728 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
729 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
730 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
731
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
732 static void
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
733 account_menu_added_removed_cb(GaimAccount *account, GtkWidget *optmenu)
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
734 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
735 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
736 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
737
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
738 static gboolean
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
739 account_menu_destroyed_cb(GtkWidget *optmenu, GdkEvent *event,
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
740 void *user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
741 {
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
742 gaim_signals_disconnect_by_handle(optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
743
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
744 return FALSE;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
745 }
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
746
9910
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
747 void
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
748 gaim_gtk_account_option_menu_set_selected(GtkWidget *optmenu, GaimAccount *account)
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
749 {
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
750 GtkWidget *menu;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
751 GtkWidget *item;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
752 gboolean show_all;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
753 GaimAccount *curaccount;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
754 GaimFilterAccountFunc filter_func;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
755
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
756 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
757 item = gtk_menu_get_active(GTK_MENU(menu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
758 curaccount = g_object_get_data(G_OBJECT(item), "account");
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
759
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
760 if (account == curaccount)
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
761 return;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
762
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
763 show_all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(optmenu),
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
764 "show_all"));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
765
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
766 filter_func = g_object_get_data(G_OBJECT(optmenu),
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
767 "filter_func");
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
768
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
769 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
770
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
771 create_account_menu(optmenu, account, filter_func, show_all);
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
772 }
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
773
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
774 GtkWidget *
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
775 gaim_gtk_account_option_menu_new(GaimAccount *default_account,
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
776 gboolean show_all, GCallback cb,
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
777 GaimFilterAccountFunc filter_func,
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
778 gpointer user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
779 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
780 GtkWidget *optmenu;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
781
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
782 /* Create the option menu */
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
783 optmenu = gtk_option_menu_new();
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
784 gtk_widget_show(optmenu);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
785
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
786 g_signal_connect(G_OBJECT(optmenu), "destroy",
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
787 G_CALLBACK(account_menu_destroyed_cb), NULL);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
788
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
789 /* Register the gaim sign on/off event callbacks. */
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
790 gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
791 optmenu, GAIM_CALLBACK(account_menu_sign_on_off_cb),
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
792 optmenu);
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
793 gaim_signal_connect(gaim_connections_get_handle(), "signed-off",
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
794 optmenu, GAIM_CALLBACK(account_menu_sign_on_off_cb),
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
795 optmenu);
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
796 gaim_signal_connect(gaim_accounts_get_handle(), "account-added",
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
797 optmenu, GAIM_CALLBACK(account_menu_added_removed_cb),
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
798 optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
799 gaim_signal_connect(gaim_accounts_get_handle(), "account-removed",
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
800 optmenu, GAIM_CALLBACK(account_menu_added_removed_cb),
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
801 optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
802
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
803 /* Set some data. */
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
804 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
805 g_object_set_data(G_OBJECT(optmenu), "show_all", GINT_TO_POINTER(show_all));
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
806 g_object_set_data(G_OBJECT(optmenu), "filter_func",
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
807 filter_func);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
808
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
809 /* Create and set the actual menu. */
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
810 create_account_menu(optmenu, default_account, filter_func, show_all);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
811
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
812 /* And now the last callback. */
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
813 g_signal_connect(G_OBJECT(optmenu), "changed",
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
814 G_CALLBACK(account_menu_cb), cb);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
815
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
816 return optmenu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
817 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
818
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
819 gboolean
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
820 gaim_gtk_check_if_dir(const char *path, GtkFileSelection *filesel)
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
821 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
822 char *dirname;
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
823
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
824 if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
825 /* append a / if needed */
9534
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
826 if (path[strlen(path) - 1] != G_DIR_SEPARATOR) {
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
827 dirname = g_strconcat(path, G_DIR_SEPARATOR_S, NULL);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
828 } else {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
829 dirname = g_strdup(path);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
830 }
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
831 gtk_file_selection_set_filename(filesel, dirname);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
832 g_free(dirname);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
833 return TRUE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
834 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
835
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
836 return FALSE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
837 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
838
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
839 void
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
840 gaim_gtk_setup_gtkspell(GtkTextView *textview)
12061
ef756336217f [gaim-migrate @ 14356]
Mike Hearn <mike@theoretic.com>
parents: 11878
diff changeset
841 {
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
842 #ifdef USE_GTKSPELL
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
843 GError *error = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
844 char *locale = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
845
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
846 g_return_if_fail(textview != NULL);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
847 g_return_if_fail(GTK_IS_TEXT_VIEW(textview));
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
848
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
849 if (gtkspell_new_attach(textview, locale, &error) == NULL && error)
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
850 {
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
851 gaim_debug_warning("gtkspell", "Failed to setup GtkSpell: %s\n",
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
852 error->message);
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
853 g_error_free(error);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
854 }
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
855 #endif /* USE_GTKSPELL */
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
856 }
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
857
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
858 void
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
859 gaim_gtk_save_accels_cb(GtkAccelGroup *accel_group, guint arg1,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
860 GdkModifierType arg2, GClosure *arg3,
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
861 gpointer data)
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
862 {
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
863 gaim_debug(GAIM_DEBUG_MISC, "accels",
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
864 "accel changed, scheduling save.\n");
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
865
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
866 if (!accels_save_timer)
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
867 accels_save_timer = g_timeout_add(5000, gaim_gtk_save_accels,
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
868 NULL);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
869 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
870
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
871 gboolean
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
872 gaim_gtk_save_accels(gpointer data)
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
873 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
874 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
875
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
876 filename = g_build_filename(gaim_user_dir(), G_DIR_SEPARATOR_S,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
877 "accels", NULL);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
878 gaim_debug(GAIM_DEBUG_MISC, "accels", "saving accels to %s\n", filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
879 gtk_accel_map_save(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
880 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
881
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
882 accels_save_timer = 0;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
883 return FALSE;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
884 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
885
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
886 void
12322
8a769e8e91fc [gaim-migrate @ 14626]
Richard Laager <rlaager@pidgin.im>
parents: 12114
diff changeset
887 gaim_gtk_load_accels()
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
888 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
889 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
890
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
891 filename = g_build_filename(gaim_user_dir(), G_DIR_SEPARATOR_S,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
892 "accels", NULL);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
893 gtk_accel_map_load(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
894 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
895 }
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
896
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
897 gboolean
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
898 gaim_gtk_parse_x_im_contact(const char *msg, gboolean all_accounts,
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
899 GaimAccount **ret_account, char **ret_protocol,
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
900 char **ret_username, char **ret_alias)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
901 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
902 char *protocol = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
903 char *username = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
904 char *alias = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
905 char *str;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
906 char *c, *s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
907 gboolean valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
908
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
909 g_return_val_if_fail(msg != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
910 g_return_val_if_fail(ret_protocol != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
911 g_return_val_if_fail(ret_username != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
912
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
913 s = str = g_strdup(msg);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
914
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
915 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
916 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
917 char *key, *value;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
918
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
919 key = s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
920
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
921 /* Grab the key */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
922 while (*s != '\r' && *s != '\n' && *s != '\0' && *s != ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
923 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
924
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
925 if (*s == '\r') s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
926
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
927 if (*s == '\n')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
928 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
929 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
930 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
931 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
932
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
933 if (*s != '\0') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
934
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
935 /* Clear past any whitespace */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
936 while (*s != '\0' && *s == ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
937 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
938
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
939 /* Now let's grab until the end of the line. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
940 value = s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
941
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
942 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
943 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
944
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
945 if (*s == '\r') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
946 if (*s == '\n') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
947
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
948 if ((c = strchr(key, ':')) != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
949 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
950 if (!g_ascii_strcasecmp(key, "X-IM-Username:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
951 username = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
952 else if (!g_ascii_strcasecmp(key, "X-IM-Protocol:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
953 protocol = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
954 else if (!g_ascii_strcasecmp(key, "X-IM-Alias:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
955 alias = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
956 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
957 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
958
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
959 if (username != NULL && protocol != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
960 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
961 valid = TRUE;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
962
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
963 *ret_username = username;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
964 *ret_protocol = protocol;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
965
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
966 if (ret_alias != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
967 *ret_alias = alias;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
968
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
969 /* Check for a compatible account. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
970 if (ret_account != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
971 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
972 GList *list;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
973 GaimAccount *account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
974 GList *l;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
975 const char *protoname;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
976
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
977 if (all_accounts)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
978 list = gaim_accounts_get_all();
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
979 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
980 list = gaim_connections_get_all();
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
981
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
982 for (l = list; l != NULL; l = l->next)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
983 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
984 GaimConnection *gc;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
985 GaimPluginProtocolInfo *prpl_info = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
986 GaimPlugin *plugin;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
987
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
988 if (all_accounts)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
989 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
990 account = (GaimAccount *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
991
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
992 plugin = gaim_plugins_find_with_id(
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
993 gaim_account_get_protocol_id(account));
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
994
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
995 if (plugin == NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
996 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
997 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
998
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
999 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1000 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1001
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1002 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1003 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1004 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1005 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1006 gc = (GaimConnection *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1007 account = gaim_connection_get_account(gc);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1008
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1009 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1010 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1011
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1012 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1013
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1014 if (!strcmp(protoname, protocol))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1015 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1016
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1017 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1018 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1019
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1020 /* Special case for AIM and ICQ */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1021 if (account == NULL && (!strcmp(protocol, "aim") ||
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1022 !strcmp(protocol, "icq")))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1023 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1024 for (l = list; l != NULL; l = l->next)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1025 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1026 GaimConnection *gc;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1027 GaimPluginProtocolInfo *prpl_info = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1028 GaimPlugin *plugin;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1029
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1030 if (all_accounts)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1031 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1032 account = (GaimAccount *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1033
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1034 plugin = gaim_plugins_find_with_id(
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1035 gaim_account_get_protocol_id(account));
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1036
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1037 if (plugin == NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1038 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1039 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1040
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1041 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1042 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1043
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1044 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1045 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1046 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1047 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1048 gc = (GaimConnection *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1049 account = gaim_connection_get_account(gc);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1050
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1051 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1052 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1053
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1054 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1055
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1056 if (!strcmp(protoname, "aim") || !strcmp(protoname, "icq"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1057 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1058
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1059 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1060 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1061 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1062
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1063 *ret_account = account;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1064 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1065 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1066 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1067 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1068 valid = FALSE;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1069
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1070 g_free(username);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1071 g_free(protocol);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1072 g_free(alias);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1073 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1074
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1075 g_free(str);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1076
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1077 return valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1078 }
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1079
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1080 void
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1081 gaim_set_accessible_label (GtkWidget *w, GtkWidget *l)
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1082 {
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1083 AtkObject *acc, *label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1084 AtkObject *rel_obj[1];
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1085 AtkRelationSet *set;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1086 AtkRelation *relation;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1087 const gchar *label_text;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1088 const gchar *existing_name;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1089
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1090 acc = gtk_widget_get_accessible (w);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1091 label = gtk_widget_get_accessible (l);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1092
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1093 /* If this object has no name, set it's name with the label text */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1094 existing_name = atk_object_get_name (acc);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1095 if (!existing_name) {
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1096 label_text = gtk_label_get_text (GTK_LABEL(l));
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1097 if (label_text)
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1098 atk_object_set_name (acc, label_text);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1099 }
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1100
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1101 /* Create the labeled-by relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1102 set = atk_object_ref_relation_set (acc);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1103 rel_obj[0] = label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1104 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABELLED_BY);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1105 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1106 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1107
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1108 /* Create the label-for relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1109 set = atk_object_ref_relation_set (label);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1110 rel_obj[0] = acc;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1111 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABEL_FOR);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1112 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1113 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1114 }
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1115
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1116 #if GTK_CHECK_VERSION(2,2,0)
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1117 static void
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1118 gaim_gtk_menu_position_func(GtkMenu *menu,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1119 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1120 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1121 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1122 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1123 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1124 GtkWidget *widget;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1125 GtkRequisition requisition;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1126 GdkScreen *screen;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1127 GdkRectangle monitor;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1128 gint monitor_num;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1129 gint space_left, space_right, space_above, space_below;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1130 gint needed_width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1131 gint needed_height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1132 gint xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1133 gint ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1134 gboolean rtl;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1135
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1136 g_return_if_fail(GTK_IS_MENU(menu));
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1137
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1138 widget = GTK_WIDGET(menu);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1139 screen = gtk_widget_get_screen(widget);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1140 xthickness = widget->style->xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1141 ythickness = widget->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1142 rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1144 /*
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1145 * We need the requisition to figure out the right place to
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1146 * popup the menu. In fact, we always need to ask here, since
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1147 * if a size_request was queued while we weren't popped up,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1148 * the requisition won't have been recomputed yet.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1149 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1150 gtk_widget_size_request (widget, &requisition);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1151
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1152 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1153
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1154 push_in = FALSE;
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1155
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1156 /*
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1157 * The placement of popup menus horizontally works like this (with
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1158 * RTL in parentheses)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1159 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1160 * - If there is enough room to the right (left) of the mouse cursor,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1161 * position the menu there.
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1162 *
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1163 * - Otherwise, if if there is enough room to the left (right) of the
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1164 * mouse cursor, position the menu there.
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1165 *
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1166 * - Otherwise if the menu is smaller than the monitor, position it
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1167 * on the side of the mouse cursor that has the most space available
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1168 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1169 * - Otherwise (if there is simply not enough room for the menu on the
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1170 * monitor), position it as far left (right) as possible.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1171 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1172 * Positioning in the vertical direction is similar: first try below
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1173 * mouse cursor, then above.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1174 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1175 gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1176
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1177 space_left = *x - monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1178 space_right = monitor.x + monitor.width - *x - 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1179 space_above = *y - monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1180 space_below = monitor.y + monitor.height - *y - 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1181
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1182 /* position horizontally */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1183
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1184 /* the amount of space we need to position the menu. Note the
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1185 * menu is offset "xthickness" pixels
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1186 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1187 needed_width = requisition.width - xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1188
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1189 if (needed_width <= space_left ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1190 needed_width <= space_right)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1191 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1192 if ((rtl && needed_width <= space_left) ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1193 (!rtl && needed_width > space_right))
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1194 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1195 /* position left */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1196 *x = *x + xthickness - requisition.width + 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1197 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1198 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1199 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1200 /* position right */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1201 *x = *x - xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1202 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1203
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1204 /* x is clamped on-screen further down */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1205 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1206 else if (requisition.width <= monitor.width)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1207 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1208 /* the menu is too big to fit on either side of the mouse
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1209 * cursor, but smaller than the monitor. Position it on
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1210 * the side that has the most space
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1211 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1212 if (space_left > space_right)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1213 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1214 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1215 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1216 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1217 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1218 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1219 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1220 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1221 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1222 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1223 else /* menu is simply too big for the monitor */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1224 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1225 if (rtl)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1226 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1227 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1228 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1229 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1230 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1231 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1232 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1233 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1234 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1235 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1236
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1237 /* Position vertically. The algorithm is the same as above, but
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1238 * simpler because we don't have to take RTL into account.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1239 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1240 needed_height = requisition.height - ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1241
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1242 if (needed_height <= space_above ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1243 needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1244 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1245 if (needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1246 *y = *y - ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1247 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1248 *y = *y + ythickness - requisition.height + 1;
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1249
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1250 *y = CLAMP (*y, monitor.y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1251 monitor.y + monitor.height - requisition.height);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1252 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1253 else if (needed_height > space_below && needed_height > space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1254 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1255 if (space_below >= space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1256 *y = monitor.y + monitor.height - requisition.height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1257 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1258 *y = monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1259 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1260 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1261 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1262 *y = monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1263 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1264 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1265
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1266 #endif
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1267
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1268 void
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1269 gaim_gtk_treeview_popup_menu_position_func(GtkMenu *menu,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1270 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1271 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1272 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1273 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1274 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1275 GtkWidget *widget = GTK_WIDGET(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1276 GtkTreeView *tv = GTK_TREE_VIEW(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1277 GtkTreePath *path;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1278 GtkTreeViewColumn *col;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1279 GdkRectangle rect;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1280 gint ythickness = GTK_WIDGET(menu)->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1281
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1282 gdk_window_get_origin (widget->window, x, y);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1283 gtk_tree_view_get_cursor (tv, &path, &col);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1284 gtk_tree_view_get_cell_area (tv, path, col, &rect);
8218
0ff223f56a67 [gaim-migrate @ 8941]
Christian Hammond <chipx86@chipx86.com>
parents: 8215
diff changeset
1285
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1286 *x += rect.x+rect.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1287 *y += rect.y+rect.height+ythickness;
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1288 #if GTK_CHECK_VERSION(2,2,0)
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1289 gaim_gtk_menu_position_func (menu, x, y, push_in, data);
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1290 #endif
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1291 }
10061
2833056ea11c [gaim-migrate @ 11033]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9910
diff changeset
1292
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1293 enum {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1294 DND_FILE_TRANSFER,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1295 DND_IM_IMAGE,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1296 DND_BUDDY_ICON
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1297 };
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1298
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1299 typedef struct {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1300 char *filename;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1301 GaimAccount *account;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1302 char *who;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1303 } _DndData;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1304
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
1305 static void dnd_image_ok_callback(_DndData *data, int choice)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1306 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1307 char *filedata;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1308 size_t size;
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1309 struct stat st;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1310 GError *err = NULL;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1311 GaimConversation *conv;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1312 GaimGtkConversation *gtkconv;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1313 GtkTextIter iter;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1314 int id;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1315 switch (choice) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1316 case DND_BUDDY_ICON:
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1317 if (g_stat(data->filename, &st)) {
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1318 char *str;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1319
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1320 str = g_strdup_printf(_("The following error has occurred loading %s: %s"),
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1321 data->filename, strerror(errno));
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1322 gaim_notify_error(NULL, NULL,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1323 _("Failed to load image"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1324 str);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1325 g_free(str);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1326
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1327 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1328 }
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1329
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1330 gaim_gtk_set_custom_buddy_icon(data->account, data->who, data->filename);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1331 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1332 case DND_FILE_TRANSFER:
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1333 serv_send_file(gaim_account_get_connection(data->account), data->who, data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1334 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1335 case DND_IM_IMAGE:
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 11251
diff changeset
1336 conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, data->account, data->who);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1337 gtkconv = GAIM_GTK_CONVERSATION(conv);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1338
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1339 if (!g_file_get_contents(data->filename, &filedata, &size,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1340 &err)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1341 char *str;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1342
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1343 str = g_strdup_printf(_("The following error has occurred loading %s: %s"), data->filename, err->message);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1344 gaim_notify_error(NULL, NULL,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1345 _("Failed to load image"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1346 str);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1347
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1348 g_error_free(err);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1349 g_free(str);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1350
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1351 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1352 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1353 id = gaim_imgstore_add(filedata, size, data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1354 g_free(filedata);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1355
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1356 gtk_text_buffer_get_iter_at_mark(GTK_IMHTML(gtkconv->entry)->text_buffer, &iter,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1357 gtk_text_buffer_get_insert(GTK_IMHTML(gtkconv->entry)->text_buffer));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1358 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(gtkconv->entry), id, &iter);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1359 gaim_imgstore_unref(id);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1360
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1361 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1362 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1363 free(data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1364 free(data->who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1365 free(data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1366 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1367
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
1368 static void dnd_image_cancel_callback(_DndData *data, int choice)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1369 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1370 free(data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1371 free(data->who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1372 free(data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1373 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1374
11110
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1375 static void dnd_set_icon_ok_cb(_DndData *data)
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1376 {
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1377 dnd_image_ok_callback(data, DND_BUDDY_ICON);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1378 }
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1379
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1380 static void dnd_set_icon_cancel_cb(_DndData *data)
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1381 {
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1382 free(data->filename);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1383 free(data->who);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1384 free(data);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1385 }
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1386
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1387 void
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1388 gaim_dnd_file_manage(GtkSelectionData *sd, GaimAccount *account, const char *who)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1389 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1390 GList *tmp;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1391 GdkPixbuf *pb;
11135
063678d038f9 [gaim-migrate @ 13196]
Mark Doliner <markdoliner@pidgin.im>
parents: 11110
diff changeset
1392 GList *files = gaim_uri_list_extract_filenames((const gchar *)sd->data);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1393 GaimConnection *gc = gaim_account_get_connection(account);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1394 GaimPluginProtocolInfo *prpl_info = NULL;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1395 gboolean file_send_ok = FALSE;
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1396 #ifndef _WIN32
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1397 GaimDesktopItem *item;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1398 #endif
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1399
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1400 g_return_if_fail(account != NULL);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1401 g_return_if_fail(who != NULL);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1402
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1403 for(tmp = files; tmp != NULL ; tmp = g_list_next(tmp)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1404 gchar *filename = tmp->data;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1405 gchar *basename = g_path_get_basename(filename);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1406
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1407 /* Set the default action: don't send anything */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1408 file_send_ok = FALSE;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1409
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1410 /* XXX - Make ft API support creating a transfer with more than one file */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1411 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1412 continue;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1413 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1414
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1415 /* XXX - make ft api suupport sending a directory */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1416 /* Are we dealing with a directory? */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1417 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1418 char *str;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1419
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1420 str = g_strdup_printf(_("Cannot send folder %s."), basename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1421 gaim_notify_error(NULL, NULL,
15442
2ff7f5308727 I think this is all the instances of 'Gaim' within pidgin/
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
1422 str,_(PIDGIN_NAME " cannot transfer a folder. You will need to send the files within individually"));
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1423
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1424 g_free(str);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1425
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1426 continue;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1427 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1428
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1429 /* Are we dealing with an image? */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1430 pb = gdk_pixbuf_new_from_file(filename, NULL);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1431 if (pb) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1432 _DndData *data = g_malloc(sizeof(_DndData));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1433 gboolean ft = FALSE, im = FALSE;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1434
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1435 data->who = g_strdup(who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1436 data->filename = g_strdup(filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1437 data->account = account;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1438
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1439 if (gc)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1440 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
10348
0ab5eb1a828e [gaim-migrate @ 11562]
Mark Doliner <markdoliner@pidgin.im>
parents: 10335
diff changeset
1441
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1442 if (prpl_info && prpl_info->options & OPT_PROTO_IM_IMAGE)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1443 im = TRUE;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1444
10348
0ab5eb1a828e [gaim-migrate @ 11562]
Mark Doliner <markdoliner@pidgin.im>
parents: 10335
diff changeset
1445 if (prpl_info && prpl_info->can_receive_file)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1446 ft = prpl_info->can_receive_file(gc, who);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1447
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1448 if (im && ft)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1449 gaim_request_choice(NULL, NULL,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1450 _("You have dragged an image"),
10951
a81bececc6f0 [gaim-migrate @ 12751]
Richard Laager <rlaager@pidgin.im>
parents: 10871
diff changeset
1451 _("You can send this image as a file transfer, "
a81bececc6f0 [gaim-migrate @ 12751]
Richard Laager <rlaager@pidgin.im>
parents: 10871
diff changeset
1452 "embed it into this message, or use it as the buddy icon for this user."),
13101
55659ca43906 [gaim-migrate @ 15462]
Richard Laager <rlaager@pidgin.im>
parents: 13100
diff changeset
1453 DND_FILE_TRANSFER, "OK", (GCallback)dnd_image_ok_callback,
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1454 "Cancel", (GCallback)dnd_image_cancel_callback, data,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1455 _("Set as buddy icon"), DND_BUDDY_ICON,
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1456 _("Send image file"), DND_FILE_TRANSFER,
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1457 _("Insert in message"), DND_IM_IMAGE, NULL);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1458 else if (!(im || ft))
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1459 gaim_request_yes_no(NULL, NULL, _("You have dragged an image"),
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1460 _("Would you like to set it as the buddy icon for this user?"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1461 0, data, (GCallback)dnd_set_icon_ok_cb, (GCallback)dnd_set_icon_cancel_cb);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1462 else
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1463 gaim_request_choice(NULL, NULL,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1464 _("You have dragged an image"),
10951
a81bececc6f0 [gaim-migrate @ 12751]
Richard Laager <rlaager@pidgin.im>
parents: 10871
diff changeset
1465 ft ? _("You can send this image as a file transfer or "
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1466 "embed it into this message, or use it as the buddy icon for this user.") :
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1467 _("You can insert this image into this message, or use it as the buddy icon for this user"),
13101
55659ca43906 [gaim-migrate @ 15462]
Richard Laager <rlaager@pidgin.im>
parents: 13100
diff changeset
1468 ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, "OK", (GCallback)dnd_image_ok_callback,
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1469 "Cancel", (GCallback)dnd_image_cancel_callback, data,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1470 _("Set as buddy icon"), DND_BUDDY_ICON,
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1471 ft ? _("Send image file") : _("Insert in message"), ft ? DND_FILE_TRANSFER : DND_IM_IMAGE, NULL);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1472 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1473 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1474
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1475 #ifndef _WIN32
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1476 /* Are we trying to send a .desktop file? */
11780
9aee3bde84b9 [gaim-migrate @ 14071]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 11638
diff changeset
1477 else if (gaim_str_has_suffix(basename, ".desktop") && (item = gaim_desktop_item_new_from_file(filename))) {
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1478 GaimDesktopItemType dtype;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1479 char key[64];
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1480 const char *itemname = NULL;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1481
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1482 #if GTK_CHECK_VERSION(2,6,0)
10679
3b71abc53c06 [gaim-migrate @ 12225]
Nathan Walp <nwalp@pidgin.im>
parents: 10590
diff changeset
1483 const char * const *langs;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1484 int i;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1485 langs = g_get_language_names();
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1486 for (i = 0; langs[i]; i++) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1487 g_snprintf(key, sizeof(key), "Name[%s]", langs[i]);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1488 itemname = gaim_desktop_item_get_string(item, key);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1489 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1490 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1491 #else
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1492 const char *lang = g_getenv("LANG");
10681
7c56ed5f169f [gaim-migrate @ 12227]
Richard Laager <rlaager@pidgin.im>
parents: 10679
diff changeset
1493 char *dot;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1494 dot = strchr(lang, '.');
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1495 if (dot)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1496 *dot = '\0';
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1497 g_snprintf(key, sizeof(key), "Name[%s]", lang);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1498 itemname = gaim_desktop_item_get_string(item, key);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1499 #endif
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1500 if (!itemname)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1501 itemname = gaim_desktop_item_get_string(item, "Name");
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1502
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1503 dtype = gaim_desktop_item_get_entry_type(item);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1504 switch (dtype) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1505 GaimConversation *conv;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1506 GaimGtkConversation *gtkconv;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1507
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1508 case GAIM_DESKTOP_ITEM_TYPE_LINK:
11338
1a3663ac9b05 [gaim-migrate @ 13551]
Mark Doliner <markdoliner@pidgin.im>
parents: 11251
diff changeset
1509 conv = gaim_conversation_new(GAIM_CONV_TYPE_IM, account, who);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1510 gtkconv = GAIM_GTK_CONVERSATION(conv);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1511 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry),
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1512 gtk_text_buffer_get_insert(GTK_IMHTML(gtkconv->entry)->text_buffer),
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1513 gaim_desktop_item_get_string(item, "URL"), itemname);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1514 break;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1515 default:
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1516 /* I don't know if we really want to do anything here. Most of the desktop item types are crap like
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1517 * "MIME Type" (I have no clue how that would be a desktop item) and "Comment"... nothing we can really
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1518 * send. The only logical one is "Application," but do we really want to send a binary and nothing else?
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1519 * Probably not. I'll just give an error and return. */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1520 /* The original patch sent the icon used by the launcher. That's probably wrong */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1521 gaim_notify_error(NULL, NULL, _("Cannot send launcher"), _("You dragged a desktop launcher. "
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1522 "Most likely you wanted to send whatever this launcher points to instead of this launcher"
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1523 " itself."));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1524 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1525 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1526 gaim_desktop_item_unref(item);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1527 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1528 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1529 #endif /* _WIN32 */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1530
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1531 /* Everything is fine, let's send */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1532 serv_send_file(gc, who, filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1533 g_free(filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1534 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1535 g_list_free(files);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1536 }
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1537
15301
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1538 void gaim_gtk_buddy_icon_get_scale_size(GdkPixbuf *buf, GaimBuddyIconSpec *spec, GaimIconScaleRules rules, int *width, int *height)
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1539 {
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1540 *width = gdk_pixbuf_get_width(buf);
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1541 *height = gdk_pixbuf_get_height(buf);
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1542
15301
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1543 if ((spec == NULL) || !(spec->scale_rules & rules))
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1544 return;
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1545
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1546 gaim_buddy_icon_get_scale_size(spec, width, height);
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1547
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1548 /* and now for some arbitrary sanity checks */
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1549 if(*width > 100)
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1550 *width = 100;
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1551 if(*height > 100)
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1552 *height = 100;
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1553 }
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1554
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1555 GdkPixbuf *
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1556 gaim_gtk_create_prpl_icon(GaimAccount *account, PidginPrplIconSize size)
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1557 {
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1558 GaimPlugin *prpl;
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1559 GaimPluginProtocolInfo *prpl_info;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1560 const char *protoname = NULL;
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1561 char buf[256]; /* TODO: We should use a define for max file length */
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1562 char *filename = NULL;
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1563 GdkPixbuf *pixbuf;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1564
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1565 g_return_val_if_fail(account != NULL, NULL);
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1566
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1567 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account));
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1568 if (prpl == NULL)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1569 return NULL;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1570
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1571 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1572 if (prpl_info->list_icon == NULL)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1573 return NULL;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1574
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1575 protoname = prpl_info->list_icon(account, NULL);
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1576 if (protoname == NULL)
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1577 return NULL;
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1578
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1579 /*
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1580 * Status icons will be themeable too, and then it will look up
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1581 * protoname from the theme
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1582 */
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1583 g_snprintf(buf, sizeof(buf), "%s.png", protoname);
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1584
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1585 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1586 size == PIDGIN_PRPL_ICON_SMALL ? "16" :
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1587 size == PIDGIN_PRPL_ICON_MEDIUM ? "22" : "48",
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1588 buf, NULL);
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1589 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1590 g_free(filename);
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1591
15496
76b5ca00a36c I think this takes care of protocol icons. Note there are still places
Sean Egan <seanegan@pidgin.im>
parents: 15474
diff changeset
1592 return pixbuf;
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1593 }
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1594
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1595 static GdkPixbuf *
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1596 overlay_status_onto_icon(GdkPixbuf *pixbuf, GaimStatusPrimitive primitive)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1597 {
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1598 const char *type_name;
13114
89c855cbfe02 [gaim-migrate @ 15475]
Richard Laager <rlaager@pidgin.im>
parents: 13110
diff changeset
1599 char basename[256];
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1600 char *filename;
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1601 GdkPixbuf *emblem;
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1602
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1603 type_name = gaim_primitive_get_id_from_type(primitive);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1604
13114
89c855cbfe02 [gaim-migrate @ 15475]
Richard Laager <rlaager@pidgin.im>
parents: 13110
diff changeset
1605 g_snprintf(basename, sizeof(basename), "%s.png", type_name);
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1606 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status",
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1607 "default", basename, NULL);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1608 emblem = gdk_pixbuf_new_from_file(filename, NULL);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1609 g_free(filename);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1610
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1611 if (emblem != NULL) {
13092
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1612 int width, height, emblem_width, emblem_height;
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1613 int new_emblem_width, new_emblem_height;
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1614
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1615 width = gdk_pixbuf_get_width(pixbuf);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1616 height = gdk_pixbuf_get_height(pixbuf);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1617 emblem_width = gdk_pixbuf_get_width(emblem);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1618 emblem_height = gdk_pixbuf_get_height(emblem);
13092
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1619
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1620 /*
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1621 * Figure out how big to make the emblem. Normally the emblem
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1622 * will have half the width of the pixbuf. But we don't make
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1623 * an emblem any smaller than 10 pixels because it becomes
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1624 * unrecognizable, unless the width of the pixbuf is less than
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1625 * 10 pixels, in which case we make the emblem width the same
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1626 * as the pixbuf width.
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1627 */
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1628 new_emblem_width = MAX(width / 2, MIN(width, 10));
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1629 new_emblem_height = MAX(height / 2, MIN(height, 10));
71c23905c88f [gaim-migrate @ 15453]
Mark Doliner <markdoliner@pidgin.im>
parents: 13091
diff changeset
1630
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1631 /* Overlay emblem onto the bottom right corner of pixbuf */
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1632 gdk_pixbuf_composite(emblem, pixbuf,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1633 width - new_emblem_width, height - new_emblem_height,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1634 new_emblem_width, new_emblem_height,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1635 width - new_emblem_width, height - new_emblem_height,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1636 (double)new_emblem_width / (double)emblem_width,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1637 (double)new_emblem_height / (double)emblem_height,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1638 GDK_INTERP_BILINEAR,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1639 255);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1640 g_object_unref(emblem);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1641 }
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1642
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1643 return pixbuf;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1644 }
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1645
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1646 GdkPixbuf *
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1647 gaim_gtk_create_prpl_icon_with_status(GaimAccount *account, GaimStatusType *status_type, double scale_factor)
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1648 {
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1649 GdkPixbuf *pixbuf;
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1650
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1651 pixbuf = gaim_gtk_create_prpl_icon(account, scale_factor);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1652 if (pixbuf == NULL)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1653 return NULL;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1654
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1655 /*
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1656 * TODO: Let the prpl pick the emblem on a per status basis,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1657 * and only use the primitive as a fallback?
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1658 */
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1659
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1660 return overlay_status_onto_icon(pixbuf,
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1661 gaim_status_type_get_primitive(status_type));
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1662 }
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1663
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1664 GdkPixbuf *
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1665 gaim_gtk_create_gaim_icon_with_status(GaimStatusPrimitive primitive, double scale_factor)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1666 {
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1667 gchar *filename;
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1668 GdkPixbuf *orig, *pixbuf;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1669
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1670 filename = g_build_filename(DATADIR, "pixmaps", "gaim.png", NULL);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1671 orig = gdk_pixbuf_new_from_file(filename, NULL);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1672 g_free(filename);
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1673 if (orig == NULL)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1674 return NULL;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1675
13110
052e717c7281 [gaim-migrate @ 15471]
Mark Doliner <markdoliner@pidgin.im>
parents: 13103
diff changeset
1676 pixbuf = gdk_pixbuf_scale_simple(orig, 32*scale_factor,
052e717c7281 [gaim-migrate @ 15471]
Mark Doliner <markdoliner@pidgin.im>
parents: 13103
diff changeset
1677 32*scale_factor, GDK_INTERP_BILINEAR);
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1678 g_object_unref(G_OBJECT(orig));
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1679
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1680 return overlay_status_onto_icon(pixbuf, primitive);
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1681 }
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1682
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1683 static void
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1684 menu_action_cb(GtkMenuItem *item, gpointer object)
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1685 {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1686 gpointer data;
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1687 void (*callback)(gpointer, gpointer);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1688
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1689 callback = g_object_get_data(G_OBJECT(item), "gaimcallback");
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1690 data = g_object_get_data(G_OBJECT(item), "gaimcallbackdata");
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1691
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1692 if (callback)
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1693 callback(object, data);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1694 }
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1695
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1696 void
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1697 gaim_gtk_append_menu_action(GtkWidget *menu, GaimMenuAction *act,
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1698 gpointer object)
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1699 {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1700 if (act == NULL) {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1701 gaim_separator(menu);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1702 } else {
13783
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1703 GtkWidget *menuitem;
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1704
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1705 if (act->children == NULL) {
13783
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1706 menuitem = gtk_menu_item_new_with_mnemonic(act->label);
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1707
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1708 if (act->callback != NULL) {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1709 g_object_set_data(G_OBJECT(menuitem),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1710 "gaimcallback",
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1711 act->callback);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1712 g_object_set_data(G_OBJECT(menuitem),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1713 "gaimcallbackdata",
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1714 act->data);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1715 g_signal_connect(G_OBJECT(menuitem), "activate",
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1716 G_CALLBACK(menu_action_cb),
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1717 object);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1718 } else {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1719 gtk_widget_set_sensitive(menuitem, FALSE);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1720 }
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1721
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1722 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1723 } else {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1724 GList *l = NULL;
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1725 GtkWidget *submenu = NULL;
13783
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1726 GtkAccelGroup *group;
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1727
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1728 menuitem = gtk_menu_item_new_with_mnemonic(act->label);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1729 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1730
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1731 submenu = gtk_menu_new();
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1732 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1733
13783
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1734 group = gtk_menu_get_accel_group(GTK_MENU(menu));
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1735 if (group) {
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1736 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, act->label);
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1737 gtk_menu_set_accel_path(GTK_MENU(submenu), path);
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1738 g_free(path);
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1739 gtk_menu_set_accel_group(GTK_MENU(submenu), group);
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1740 }
e11fce2eaf8d [gaim-migrate @ 16193]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13470
diff changeset
1741
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1742 for (l = act->children; l; l = l->next) {
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1743 GaimMenuAction *act = (GaimMenuAction *)l->data;
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1744
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1745 gaim_gtk_append_menu_action(submenu, act, object);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1746 }
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1747 g_list_free(act->children);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1748 act->children = NULL;
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1749 }
13103
81ccb40de82b [gaim-migrate @ 15464]
Richard Laager <rlaager@pidgin.im>
parents: 13102
diff changeset
1750 gaim_menu_action_free(act);
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1751 }
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1752 }
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1753
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1754 #if GTK_CHECK_VERSION(2,3,0)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1755 # define NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1756 #endif
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1757
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1758 #ifndef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1759 typedef struct
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1760 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1761 GCompletion *completion;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1762
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1763 gboolean completion_started;
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
1764 gboolean all;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1765
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1766 } GaimGtkCompletionData;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1767 #endif
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1768
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1769 #ifndef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1770 static gboolean
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1771 completion_entry_event(GtkEditable *entry, GdkEventKey *event,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1772 GaimGtkCompletionData *data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1773 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1774 int pos, end_pos;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1775
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1776 if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Tab)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1777 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1778 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1779
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1780 if (data->completion_started &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1781 pos != end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1782 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1783 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1784 gtk_editable_select_region(entry, 0, 0);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1785 gtk_editable_set_position(entry, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1786
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1787 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1788 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1789 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1790 else if (event->type == GDK_KEY_PRESS && event->length > 0)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1791 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1792 char *prefix, *nprefix;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1793
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1794 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1795
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1796 if (data->completion_started &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1797 pos != end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1798 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1799 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1800 char *temp;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1801
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1802 temp = gtk_editable_get_chars(entry, 0, pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1803 prefix = g_strconcat(temp, event->string, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1804 g_free(temp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1805 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1806 else if (pos == end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1807 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1808 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1809 prefix = g_strconcat(gtk_entry_get_text(GTK_ENTRY(entry)),
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1810 event->string, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1811 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1812 else
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1813 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1814
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1815 pos = strlen(prefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1816 nprefix = NULL;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1817
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1818 g_completion_complete(data->completion, prefix, &nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1819
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1820 if (nprefix != NULL)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1821 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1822 gtk_entry_set_text(GTK_ENTRY(entry), nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1823 gtk_editable_set_position(entry, pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1824 gtk_editable_select_region(entry, pos, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1825
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1826 data->completion_started = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1827
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1828 g_free(nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1829 g_free(prefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1830
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1831 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1832 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1833
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1834 g_free(prefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1835 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1836
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1837 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1838 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1839
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1840 static void
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1841 destroy_completion_data(GtkWidget *w, GaimGtkCompletionData *data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1842 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1843 g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1844 g_completion_free(data->completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1845
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1846 g_free(data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1847 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1848 #endif /* !NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1849
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1850 #ifdef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1851 static gboolean screenname_completion_match_func(GtkEntryCompletion *completion,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1852 const gchar *key, GtkTreeIter *iter, gpointer user_data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1853 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1854 GtkTreeModel *model;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1855 GValue val1;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1856 GValue val2;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1857 const char *tmp;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1858
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1859 model = gtk_entry_completion_get_model (completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1860
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1861 val1.g_type = 0;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1862 gtk_tree_model_get_value(model, iter, 2, &val1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1863 tmp = g_value_get_string(&val1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1864 if (tmp != NULL && gaim_str_has_prefix(tmp, key))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1865 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1866 g_value_unset(&val1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1867 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1868 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1869 g_value_unset(&val1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1870
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1871 val2.g_type = 0;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1872 gtk_tree_model_get_value(model, iter, 3, &val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1873 tmp = g_value_get_string(&val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1874 if (tmp != NULL && gaim_str_has_prefix(tmp, key))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1875 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1876 g_value_unset(&val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1877 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1878 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1879 g_value_unset(&val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1880
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1881 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1882 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1883
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1884 static gboolean screenname_completion_match_selected_cb(GtkEntryCompletion *completion,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1885 GtkTreeModel *model, GtkTreeIter *iter, gpointer *user_data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1886 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1887 GValue val;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1888 GtkWidget *optmenu = user_data[1];
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1889 GaimAccount *account;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1890
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1891 val.g_type = 0;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1892 gtk_tree_model_get_value(model, iter, 1, &val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1893 gtk_entry_set_text(GTK_ENTRY(user_data[0]), g_value_get_string(&val));
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1894 g_value_unset(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1895
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1896 gtk_tree_model_get_value(model, iter, 4, &val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1897 account = g_value_get_pointer(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1898 g_value_unset(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1899
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1900 if (account == NULL)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1901 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1902
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1903 if (optmenu != NULL) {
13372
dbbea75c28d8 [gaim-migrate @ 15744]
Daniel Atallah <datallah@pidgin.im>
parents: 13367
diff changeset
1904 GList *items;
dbbea75c28d8 [gaim-migrate @ 15744]
Daniel Atallah <datallah@pidgin.im>
parents: 13367
diff changeset
1905 guint index = 0;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1906 gaim_gtk_account_option_menu_set_selected(optmenu, account);
13372
dbbea75c28d8 [gaim-migrate @ 15744]
Daniel Atallah <datallah@pidgin.im>
parents: 13367
diff changeset
1907 items = GTK_MENU_SHELL(gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)))->children;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1908
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1909 do {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1910 if (account == g_object_get_data(G_OBJECT(items->data), "account")) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1911 /* Set the account in the GUI. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1912 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), index);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1913 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1914 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1915 index++;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1916 } while ((items = items->next) != NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1917 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1918
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1919 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1920 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1921
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1922 static void
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1923 add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, const char *contact_alias,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1924 const GaimAccount *account, const char *screenname)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1925 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1926 GtkTreeIter iter;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1927 gboolean completion_added = FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1928 gchar *normalized_screenname;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1929 gchar *tmp;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1930
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1931 tmp = g_utf8_normalize(screenname, -1, G_NORMALIZE_DEFAULT);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1932 normalized_screenname = g_utf8_casefold(tmp, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1933 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1934
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1935 /* There's no sense listing things like: 'xxx "xxx"'
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1936 when the screenname and buddy alias match. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1937 if (buddy_alias && strcmp(buddy_alias, screenname)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1938 char *completion_entry = g_strdup_printf("%s \"%s\"", screenname, buddy_alias);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1939 char *tmp2 = g_utf8_normalize(buddy_alias, -1, G_NORMALIZE_DEFAULT);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1940
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1941 tmp = g_utf8_casefold(tmp2, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1942 g_free(tmp2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1943
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1944 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1945 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1946 0, completion_entry,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1947 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1948 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1949 3, tmp,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1950 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1951 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1952 g_free(completion_entry);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1953 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1954 completion_added = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1955 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1956
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1957 /* There's no sense listing things like: 'xxx "xxx"'
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1958 when the screenname and contact alias match. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1959 if (contact_alias && strcmp(contact_alias, screenname)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1960 /* We don't want duplicates when the contact and buddy alias match. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1961 if (!buddy_alias || strcmp(contact_alias, buddy_alias)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1962 char *completion_entry = g_strdup_printf("%s \"%s\"",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1963 screenname, contact_alias);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1964 char *tmp2 = g_utf8_normalize(contact_alias, -1, G_NORMALIZE_DEFAULT);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1965
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1966 tmp = g_utf8_casefold(tmp2, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1967 g_free(tmp2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1968
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1969 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1970 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1971 0, completion_entry,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1972 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1973 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1974 3, tmp,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1975 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1976 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1977 g_free(completion_entry);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1978 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1979 completion_added = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1980 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1981 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1982
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1983 if (completion_added == FALSE) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1984 /* Add the buddy's screenname. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1985 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1986 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1987 0, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1988 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1989 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1990 3, NULL,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1991 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1992 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1993 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1994
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1995 g_free(normalized_screenname);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1996 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1997 #endif /* NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1998
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1999 static void get_log_set_name(GaimLogSet *set, gpointer value, gpointer **set_hash_data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2000 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2001 /* 1. Don't show buddies because we will have gotten them already.
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2002 * 2. Only show those with non-NULL accounts that are currently connected.
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2003 * 3. The boxes that use this autocomplete code handle only IMs. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2004 if (!set->buddy &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2005 (GPOINTER_TO_INT(set_hash_data[1]) ||
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2006 (set->account != NULL && gaim_account_is_connected(set->account))) &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2007 set->type == GAIM_LOG_IM) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2008 #ifdef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2009 add_screenname_autocomplete_entry((GtkListStore *)set_hash_data[0],
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2010 NULL, NULL, set->account, set->name);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2011 #else
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2012 GList **items = ((GList **)set_hash_data[0]);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2013 /* Steal the name for the GCompletion. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2014 *items = g_list_append(*items, set->name);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2015 set->name = set->normalized_name = NULL;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2016 #endif /* NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2017 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2018 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2019
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2020 #ifdef NEW_STYLE_COMPLETION
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2021 static void
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2022 add_completion_list(GtkListStore *store)
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2023 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2024 GaimBlistNode *gnode, *cnode, *bnode;
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2025 gboolean all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(store), "screenname-all"));
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2026 GHashTable *sets;
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2027 gpointer set_hash_data[] = {store, GINT_TO_POINTER(all)};
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2028
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2029 gtk_list_store_clear(store);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2030
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2031 for (gnode = gaim_get_blist()->root; gnode != NULL; gnode = gnode->next)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2032 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2033 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2034 continue;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2035
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2036 for (cnode = gnode->child; cnode != NULL; cnode = cnode->next)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2037 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2038 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2039 continue;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2040
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2041 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2042 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2043 GaimBuddy *buddy = (GaimBuddy *)bnode;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2044
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2045 if (!all && !gaim_account_is_connected(buddy->account))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2046 continue;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2047
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2048 add_screenname_autocomplete_entry(store,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2049 ((GaimContact *)cnode)->alias,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2050 gaim_buddy_get_contact_alias(buddy),
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2051 buddy->account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2052 buddy->name
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2053 );
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2054 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2055 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2056 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2057
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2058 sets = gaim_log_get_log_sets();
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2059 g_hash_table_foreach(sets, (GHFunc)get_log_set_name, &set_hash_data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2060 g_hash_table_destroy(sets);
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2061 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2062 #else
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2063 static void
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2064 add_completion_list(GaimGtkCompletionData *data)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2065 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2066 GaimBlistNode *gnode, *cnode, *bnode;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2067 GCompletion *completion;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2068 GList *item = g_list_append(NULL, NULL);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2069 GHashTable *sets;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2070 gpointer set_hash_data[2];
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2071
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2072 completion = data->completion;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2073
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2074 g_list_foreach(completion->items, (GFunc)g_free, NULL);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2075 g_completion_clear_items(completion);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2076
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2077 for (gnode = gaim_get_blist()->root; gnode != NULL; gnode = gnode->next)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2078 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2079 if (!GAIM_BLIST_NODE_IS_GROUP(gnode))
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2080 continue;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2081
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2082 for (cnode = gnode->child; cnode != NULL; cnode = cnode->next)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2083 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2084 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode))
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2085 continue;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2086
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2087 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2088 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2089 GaimBuddy *buddy = (GaimBuddy *)bnode;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2090
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2091 if (!data->all && !gaim_account_is_connected(buddy->account))
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2092 continue;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2093
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2094 item->data = g_strdup(buddy->name);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2095 g_completion_add_items(data->completion, item);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2096 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2097 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2098 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2099 g_list_free(item);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2100
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2101 sets = gaim_log_get_log_sets();
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2102 item = NULL;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2103 set_hash_data[0] = &item;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2104 set_hash_data[1] = GINT_TO_POINTER(data->all);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2105 g_hash_table_foreach(sets, (GHFunc)get_log_set_name, &set_hash_data);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2106 g_hash_table_destroy(sets);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2107 g_completion_add_items(data->completion, item);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2108 g_list_free(item);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2109 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2110 #endif
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2111
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2112 static void
13367
c05a832cf9cb [gaim-migrate @ 15739]
Richard Laager <rlaager@pidgin.im>
parents: 13366
diff changeset
2113 screenname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data)
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2114 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2115 gaim_signals_disconnect_by_handle(widget);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2116 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2117
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2118 static void
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2119 repopulate_autocomplete(gpointer something, gpointer data)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2120 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2121 add_completion_list(data);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2122 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2123
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2124 void
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2125 gaim_gtk_setup_screenname_autocomplete(GtkWidget *entry, GtkWidget *accountopt, gboolean all)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2126 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2127 gpointer cb_data = NULL;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2128
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2129 #ifdef NEW_STYLE_COMPLETION
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2130 /* Store the displayed completion value, the screenname, the UTF-8 normalized & casefolded screenname,
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2131 * the UTF-8 normalized & casefolded value for comparison, and the account. */
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2132 GtkListStore *store = gtk_list_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2133
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2134 GtkEntryCompletion *completion;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2135 gpointer *data;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2136
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2137 g_object_set_data(G_OBJECT(store), "screenname-all", GINT_TO_POINTER(all));
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2138 add_completion_list(store);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2139
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2140 cb_data = store;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2141
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2142 /* Sort the completion list by screenname. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2143 gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(store),
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2144 1, GTK_SORT_ASCENDING);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2145
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2146 completion = gtk_entry_completion_new();
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2147 gtk_entry_completion_set_match_func(completion, screenname_completion_match_func, NULL, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2148
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2149 data = g_new0(gpointer, 2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2150 data[0] = entry;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2151 data[1] = accountopt;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2152 g_signal_connect(G_OBJECT(completion), "match-selected",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2153 G_CALLBACK(screenname_completion_match_selected_cb), data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2154
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2155 gtk_entry_set_completion(GTK_ENTRY(entry), completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2156 g_object_unref(completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2157
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2158 gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store));
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2159 g_object_unref(store);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2160
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2161 gtk_entry_completion_set_text_column(completion, 0);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2162
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2163 #else /* !NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2164 GaimGtkCompletionData *data;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2165
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2166 data = g_new0(GaimGtkCompletionData, 1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2167
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2168 data->completion = g_completion_new(NULL);
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2169 data->all = all;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2170
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2171 g_completion_set_compare(data->completion, g_ascii_strncasecmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2172
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2173 add_completion_list(data);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2174 cb_data = data;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2175
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2176 g_signal_connect(G_OBJECT(entry), "event",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2177 G_CALLBACK(completion_entry_event), data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2178 g_signal_connect(G_OBJECT(entry), "destroy",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2179 G_CALLBACK(destroy_completion_data), data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2180
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2181 #endif /* !NEW_STYLE_COMPLETION */
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2182
13366
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2183 if (!all)
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2184 {
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2185 gaim_signal_connect(gaim_connections_get_handle(), "signed-on", entry,
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2186 GAIM_CALLBACK(repopulate_autocomplete), cb_data);
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2187 gaim_signal_connect(gaim_connections_get_handle(), "signed-off", entry,
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2188 GAIM_CALLBACK(repopulate_autocomplete), cb_data);
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2189 }
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2190
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2191 gaim_signal_connect(gaim_accounts_get_handle(), "account-added", entry,
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2192 GAIM_CALLBACK(repopulate_autocomplete), cb_data);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2193 gaim_signal_connect(gaim_accounts_get_handle(), "account-removed", entry,
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2194 GAIM_CALLBACK(repopulate_autocomplete), cb_data);
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2195
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2196 g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(screenname_autocomplete_destroyed_cb), NULL);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2197 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2198
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2199 void gaim_gtk_set_cursor(GtkWidget *widget, GdkCursorType cursor_type)
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2200 {
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2201 GdkCursor *cursor;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2202
13470
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2203 g_return_if_fail(widget != NULL);
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2204 if (widget->window == NULL)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2205 return;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2206
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2207 cursor = gdk_cursor_new(GDK_WATCH);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2208 gdk_window_set_cursor(widget->window, cursor);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2209 gdk_cursor_unref(cursor);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2210
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2211 #if GTK_CHECK_VERSION(2,4,0)
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2212 gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window)));
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2213 #else
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2214 gdk_flush();
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2215 #endif
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2216 }
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2217
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2218 void gaim_gtk_clear_cursor(GtkWidget *widget)
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2219 {
13470
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2220 g_return_if_fail(widget != NULL);
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2221 if (widget->window == NULL)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2222 return;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2223
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2224 gdk_window_set_cursor(widget->window, NULL);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2225 }
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2226
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2227 struct _icon_chooser {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2228 GtkWidget *icon_filesel;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2229 GtkWidget *icon_preview;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2230 GtkWidget *icon_text;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2231
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2232 void (*callback)(const char*,gpointer);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2233 gpointer data;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2234 };
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2235
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2236 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2237 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2238 icon_filesel_delete_cb(GtkWidget *w, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2239 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2240 if (dialog->icon_filesel != NULL)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2241 gtk_widget_destroy(dialog->icon_filesel);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2242
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2243 if (dialog->callback)
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2244 dialog->callback(NULL, dialog->data);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2245
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2246 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2247 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2248 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2249
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2250
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2251
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2252 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2253 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2254 icon_filesel_choose_cb(GtkWidget *widget, gint response, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2255 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2256 char *filename, *current_folder;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2257
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2258 if (response != GTK_RESPONSE_ACCEPT) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2259 if (response == GTK_RESPONSE_CANCEL) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2260 gtk_widget_destroy(dialog->icon_filesel);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2261 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2262 dialog->icon_filesel = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2263 if (dialog->callback)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2264 dialog->callback(NULL, dialog->data);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2265 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2266 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2267 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2268
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2269 filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2270 current_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2271 if (current_folder != NULL) {
15405
4caa3012d974 [gaim-migrate @ 18136]
Nathan Walp <nwalp@pidgin.im>
parents: 15403
diff changeset
2272 gaim_prefs_set_path("/gaim/gtk/filelocations/last_icon_folder", current_folder);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2273 g_free(current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2274 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2275
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2276 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2277 static void
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2278 icon_filesel_choose_cb(GtkWidget *w, struct _icon_chooser *dialog)
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2279 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2280 char *filename, *current_folder;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2281
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2282 filename = g_strdup(gtk_file_selection_get_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2283 GTK_FILE_SELECTION(dialog->icon_filesel)));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2284
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2285 /* If they typed in a directory, change there */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2286 if (gaim_gtk_check_if_dir(filename,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2287 GTK_FILE_SELECTION(dialog->icon_filesel)))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2288 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2289 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2290 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2291 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2292
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2293 current_folder = g_path_get_dirname(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2294 if (current_folder != NULL) {
15405
4caa3012d974 [gaim-migrate @ 18136]
Nathan Walp <nwalp@pidgin.im>
parents: 15403
diff changeset
2295 gaim_prefs_set_path("/gaim/gtk/filelocations/last_icon_folder", current_folder);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2296 g_free(current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2297 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2298
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2299 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2300 if (dialog->callback)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2301 dialog->callback(filename, dialog->data);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2302 gtk_widget_destroy(dialog->icon_filesel);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2303 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2304 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2305 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2306
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2307
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2308 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2309 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2310 icon_preview_change_cb(GtkFileChooser *widget, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2311 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2312 icon_preview_change_cb(GtkTreeSelection *sel, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2313 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2314 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2315 GdkPixbuf *pixbuf, *scale;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2316 int height, width;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2317 char *basename, *markup, *size;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2318 struct stat st;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2319 char *filename;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2320
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2321 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2322 filename = gtk_file_chooser_get_preview_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2323 GTK_FILE_CHOOSER(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2324 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2325 filename = g_strdup(gtk_file_selection_get_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2326 GTK_FILE_SELECTION(dialog->icon_filesel)));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2327 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2328
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2329 if (!filename || g_stat(filename, &st))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2330 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2331 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2332 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2333 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2334
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2335 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2336 if (!pixbuf) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2337 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2338 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), "");
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2339 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2340 gtk_file_chooser_set_preview_widget_active(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2341 GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2342 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2343 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2344 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2345 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2346
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2347 width = gdk_pixbuf_get_width(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2348 height = gdk_pixbuf_get_height(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2349 basename = g_path_get_basename(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2350 size = gaim_str_size_to_units(st.st_size);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2351 markup = g_strdup_printf(_("<b>File:</b> %s\n"
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2352 "<b>File size:</b> %s\n"
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2353 "<b>Image size:</b> %dx%d"),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2354 basename, size, width, height);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2355
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2356 scale = gdk_pixbuf_scale_simple(pixbuf, width * 50 / height,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2357 50, GDK_INTERP_BILINEAR);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2358 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), scale);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2359 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2360 gtk_file_chooser_set_preview_widget_active(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2361 GTK_FILE_CHOOSER(dialog->icon_filesel), TRUE);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2362 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2363 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), markup);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2364
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2365 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2366 g_object_unref(G_OBJECT(scale));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2367 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2368 g_free(basename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2369 g_free(size);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2370 g_free(markup);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2371 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2372
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2373
14203
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2374 GtkWidget *gaim_gtk_buddy_icon_chooser_new(GtkWindow *parent, void(*callback)(const char *, gpointer), gpointer data) {
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2375 struct _icon_chooser *dialog = g_new0(struct _icon_chooser, 1);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2376
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2377 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2378 GtkWidget *hbox;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2379 GtkWidget *tv;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2380 GtkTreeSelection *sel;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2381 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2382 const char *current_folder;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2383
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2384 dialog->callback = callback;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2385 dialog->data = data;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2386
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2387 if (dialog->icon_filesel != NULL) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2388 gtk_window_present(GTK_WINDOW(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2389 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2390 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2391
15405
4caa3012d974 [gaim-migrate @ 18136]
Nathan Walp <nwalp@pidgin.im>
parents: 15403
diff changeset
2392 current_folder = gaim_prefs_get_path("/gaim/gtk/filelocations/last_icon_folder");
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2393 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2394
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2395 dialog->icon_filesel = gtk_file_chooser_dialog_new(_("Buddy Icon"),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2396 parent,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2397 GTK_FILE_CHOOSER_ACTION_OPEN,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2398 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2399 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2400 NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2401 gtk_dialog_set_default_response(GTK_DIALOG(dialog->icon_filesel), GTK_RESPONSE_ACCEPT);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2402 if ((current_folder != NULL) && (*current_folder != '\0'))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2403 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->icon_filesel),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2404 current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2405
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2406 dialog->icon_preview = gtk_image_new();
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2407 dialog->icon_text = gtk_label_new(NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2408 gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview), -1, 50);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2409 gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog->icon_filesel),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2410 GTK_WIDGET(dialog->icon_preview));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2411 g_signal_connect(G_OBJECT(dialog->icon_filesel), "update-preview",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2412 G_CALLBACK(icon_preview_change_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2413 g_signal_connect(G_OBJECT(dialog->icon_filesel), "response",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2414 G_CALLBACK(icon_filesel_choose_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2415 icon_preview_change_cb(NULL, dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2416 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2417 dialog->icon_filesel = gtk_file_selection_new(_("Buddy Icon"));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2418 dialog->icon_preview = gtk_image_new();
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2419 dialog->icon_text = gtk_label_new(NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2420 if ((current_folder != NULL) && (*current_folder != '\0'))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2421 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->icon_filesel),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2422 current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2423
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2424 gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview), -1, 50);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2425 hbox = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2426 gtk_box_pack_start(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2427 GTK_BOX(GTK_FILE_SELECTION(dialog->icon_filesel)->main_vbox),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2428 hbox, FALSE, FALSE, 0);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2429 gtk_box_pack_end(GTK_BOX(hbox), dialog->icon_preview,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2430 FALSE, FALSE, 0);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2431 gtk_box_pack_end(GTK_BOX(hbox), dialog->icon_text, FALSE, FALSE, 0);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2432
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2433 tv = GTK_FILE_SELECTION(dialog->icon_filesel)->file_list;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2434 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2435
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2436 g_signal_connect(G_OBJECT(sel), "changed",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2437 G_CALLBACK(icon_preview_change_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2438 g_signal_connect(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2439 G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->ok_button),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2440 "clicked",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2441 G_CALLBACK(icon_filesel_choose_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2442 g_signal_connect(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2443 G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->cancel_button),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2444 "clicked",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2445 G_CALLBACK(icon_filesel_delete_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2446 g_signal_connect(G_OBJECT(dialog->icon_filesel), "destroy",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2447 G_CALLBACK(icon_filesel_delete_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2448 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2449 return dialog->icon_filesel;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2450 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2451
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2452
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2453 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2454 static gboolean
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2455 str_array_match(char **a, char **b)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2456 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2457 int i, j;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2458
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2459 if (!a || !b)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2460 return FALSE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2461 for (i = 0; a[i] != NULL; i++)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2462 for (j = 0; b[j] != NULL; j++)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2463 if (!g_ascii_strcasecmp(a[i], b[j]))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2464 return TRUE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2465 return FALSE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2466 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2467 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2468
14206
5a17eb1a2c3e [gaim-migrate @ 16786]
Mark Doliner <markdoliner@pidgin.im>
parents: 14203
diff changeset
2469 char *
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2470 gaim_gtk_convert_buddy_icon(GaimPlugin *plugin, const char *path)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2471 {
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2472 GaimPluginProtocolInfo *prpl_info;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2473 #if GTK_CHECK_VERSION(2,2,0)
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2474 char **prpl_formats;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2475 int width, height;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2476 char **pixbuf_formats = NULL;
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
2477 struct stat st;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2478 GdkPixbufFormat *format;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2479 GdkPixbuf *pixbuf;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2480 #if !GTK_CHECK_VERSION(2,4,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2481 GdkPixbufLoader *loader;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2482 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2483 #endif
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2484 gchar *contents;
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2485 gsize length;
14203
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2486 const char *dirname;
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2487 char *random;
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2488 char *filename;
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2489
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2490 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2491
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2492 g_return_val_if_fail(prpl_info->icon_spec.format != NULL, NULL);
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2493
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2494 dirname = gaim_buddy_icons_get_cache_dir();
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2495 if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2496 gaim_debug_info("buddyicon", "Creating icon cache directory.\n");
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2497
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2498 if (g_mkdir(dirname, S_IRUSR | S_IWUSR | S_IXUSR) < 0) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2499 gaim_debug_error("buddyicon",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2500 "Unable to create directory %s: %s\n",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2501 dirname, strerror(errno));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2502 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2503 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2504 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2505
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2506 random = g_strdup_printf("%x", g_random_int());
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2507 filename = g_build_filename(dirname, random, NULL);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2508
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2509 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2510 #if GTK_CHECK_VERSION(2,4,0)
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2511 format = gdk_pixbuf_get_file_info(path, &width, &height);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2512 #else
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2513 loader = gdk_pixbuf_loader_new();
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2514 if (g_file_get_contents(path, &contents, &length, NULL)) {
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2515 gdk_pixbuf_loader_write(loader, contents, length, NULL);
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2516 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2517 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2518 gdk_pixbuf_loader_close(loader, NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2519 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2520 width = gdk_pixbuf_get_width(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2521 height = gdk_pixbuf_get_height(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2522 format = gdk_pixbuf_loader_get_format(loader);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2523 g_object_unref(G_OBJECT(loader));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2524 #endif
14206
5a17eb1a2c3e [gaim-migrate @ 16786]
Mark Doliner <markdoliner@pidgin.im>
parents: 14203
diff changeset
2525 if (format == NULL)
5a17eb1a2c3e [gaim-migrate @ 16786]
Mark Doliner <markdoliner@pidgin.im>
parents: 14203
diff changeset
2526 return NULL;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2527
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2528 pixbuf_formats = gdk_pixbuf_format_get_extensions(format);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2529 prpl_formats = g_strsplit(prpl_info->icon_spec.format,",",0);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2530 if (str_array_match(pixbuf_formats, prpl_formats) && /* This is an acceptable format AND */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2531 (!(prpl_info->icon_spec.scale_rules & GAIM_ICON_SCALE_SEND) || /* The prpl doesn't scale before it sends OR */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2532 (prpl_info->icon_spec.min_width <= width &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2533 prpl_info->icon_spec.max_width >= width &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2534 prpl_info->icon_spec.min_height <= height &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2535 prpl_info->icon_spec.max_height >= height))) /* The icon is the correct size */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2536 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2537 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2538 FILE *image;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2539
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2540 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2541 g_strfreev(prpl_formats);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2542 g_strfreev(pixbuf_formats);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2543 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2544
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2545 /* We don't need to scale the image, so copy it to the cache folder verbatim */
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2546
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2547 contents = NULL;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2548 if (!g_file_get_contents(path, &contents, &length, NULL) ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2549 (image = g_fopen(filename, "wb")) == NULL)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2550 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2551 g_free(random);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2552 g_free(filename);
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2553 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2554 #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2555 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2556 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2557 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2558 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2559
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2560 if (fwrite(contents, 1, length, image) != length)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2561 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2562 fclose(image);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2563 g_unlink(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2564
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2565 g_free(random);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2566 g_free(filename);
14717
4b8c7abbac2d [gaim-migrate @ 17401]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14607
diff changeset
2567 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2568 #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2569 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2570 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2571 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2572 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2573 fclose(image);
14717
4b8c7abbac2d [gaim-migrate @ 17401]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14607
diff changeset
2574 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2575
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2576 #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2577 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2578 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2579 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2580 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2581 else
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2582 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2583 int i;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2584 GError *error = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2585 GdkPixbuf *scale;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2586 g_strfreev(pixbuf_formats);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2587
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2588 pixbuf = gdk_pixbuf_new_from_file(path, &error);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2589 if (error) {
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2590 gaim_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2591 g_error_free(error);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2592 g_free(random);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2593 g_free(filename);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2594 g_strfreev(prpl_formats);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2595 return NULL;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2596 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2597
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2598 if ((prpl_info->icon_spec.scale_rules & GAIM_ICON_SCALE_SEND) &&
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2599 (width < prpl_info->icon_spec.min_width ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2600 width > prpl_info->icon_spec.max_width ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2601 height < prpl_info->icon_spec.min_height ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2602 height > prpl_info->icon_spec.max_height))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2603 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2604 int new_width = width;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2605 int new_height = height;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2606
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2607 gaim_buddy_icon_get_scale_size(&prpl_info->icon_spec, &new_width, &new_height);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2608
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2609 scale = gdk_pixbuf_scale_simple(pixbuf, new_width, new_height,
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2610 GDK_INTERP_HYPER);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2611 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2612 pixbuf = scale;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2613 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2614
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2615 for (i = 0; prpl_formats[i]; i++) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2616 gaim_debug_info("buddyicon", "Converting buddy icon to %s as %s\n", prpl_formats[i], filename);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2617 if (strcmp(prpl_formats[i], "png") == 0) {
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2618 if (gdk_pixbuf_save(pixbuf, filename, prpl_formats[i],
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2619 &error, "compression", "9", NULL))
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2620 /* Success! */
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2621 break;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2622 } else if (gdk_pixbuf_save(pixbuf, filename, prpl_formats[i],
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2623 &error, NULL)) {
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2624 /* Success! */
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2625 break;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2626 }
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2627 gaim_debug_warning("buddyicon", "Could not convert to %s: %s\n", prpl_formats[i], error->message);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2628 g_error_free(error);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2629 error = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2630 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2631 g_strfreev(prpl_formats);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2632 g_object_unref(G_OBJECT(pixbuf));
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2633 if (error) {
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2634 gaim_debug_error("buddyicon", "Could not convert icon to usable format: %s\n", error->message);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2635 g_error_free(error);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2636 g_free(random);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2637 g_free(filename);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2638 return NULL;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2639 }
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2640 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2641
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2642 if (g_stat(filename, &st) != 0) {
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2643 gaim_debug_error("buddyicon",
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2644 "Could not stat '%s', which we just wrote to disk: %s\n",
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2645 filename, strerror(errno));
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2646 g_free(random);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2647 g_free(filename);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2648 return NULL;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2649 }
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2650
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2651 /* Check the file size */
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2652 /*
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2653 * TODO: If the file is too big, it would be cool if we checked if
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2654 * the prpl supported jpeg, and then we could convert to that
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2655 * and use a lower quality setting.
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2656 */
15302
e220a1a988a3 [gaim-migrate @ 18030]
Mark Doliner <markdoliner@pidgin.im>
parents: 15301
diff changeset
2657 if ((prpl_info->icon_spec.max_filesize != 0) &&
e220a1a988a3 [gaim-migrate @ 18030]
Mark Doliner <markdoliner@pidgin.im>
parents: 15301
diff changeset
2658 (st.st_size > prpl_info->icon_spec.max_filesize))
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2659 {
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2660 gchar *tmp;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2661 tmp = g_strdup_printf(_("The file '%s' is too large for %s. Please try a smaller image.\n"),
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2662 path, plugin->info->name);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2663 gaim_notify_error(NULL, _("Icon Error"),
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2664 _("Could not set icon"), tmp);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2665 gaim_debug_info("buddyicon",
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2666 "'%s' was converted to an image which is %" G_GSIZE_FORMAT
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2667 " bytes, but the maximum icon size for %s is %" G_GSIZE_FORMAT
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2668 " bytes\n", path, st.st_size, plugin->info->name,
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2669 prpl_info->icon_spec.max_filesize);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2670 g_free(tmp);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2671 g_free(random);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2672 g_free(filename);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2673 return NULL;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2674 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2675
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2676 g_free(filename);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2677 return random;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2678 #else
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2679 /*
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2680 * The chosen icon wasn't the right size, and we're using
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2681 * GTK+ 2.0 so we can't scale it.
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2682 */
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2683 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2684 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2685 }
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2686
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2687 #if !GTK_CHECK_VERSION(2,6,0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2688 static void
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2689 _gdk_file_scale_size_prepared_cb (GdkPixbufLoader *loader,
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2690 int width,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2691 int height,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2692 gpointer data)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2693 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2694 struct {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2695 gint width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2696 gint height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2697 gboolean preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2698 } *info = data;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2699
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2700 g_return_if_fail (width > 0 && height > 0);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2701
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2702 if (info->preserve_aspect_ratio &&
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2703 (info->width > 0 || info->height > 0)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2704 if (info->width < 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2705 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2706 width = width * (double)info->height/(double)height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2707 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2708 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2709 else if (info->height < 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2710 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2711 height = height * (double)info->width/(double)width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2712 width = info->width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2713 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2714 else if ((double)height * (double)info->width >
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2715 (double)width * (double)info->height) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2716 width = 0.5 + (double)width * (double)info->height / (double)height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2717 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2718 } else {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2719 height = 0.5 + (double)height * (double)info->width / (double)width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2720 width = info->width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2721 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2722 } else {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2723 if (info->width > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2724 width = info->width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2725 if (info->height > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2726 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2727 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2728
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2729 #if GTK_CHECK_VERSION(2,2,0) /* 2.0 users are going to have very strangely sized things */
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2730 gdk_pixbuf_loader_set_size (loader, width, height);
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2731 #else
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2732 #warning nosnilmot could not be bothered to fix this properly for you
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2733 #warning ... good luck ... your images may end up strange sizes
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2734 #endif
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2735 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2736
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2737 GdkPixbuf *
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2738 gdk_pixbuf_new_from_file_at_scale(const char *filename, int width, int height,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2739 gboolean preserve_aspect_ratio,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2740 GError **error)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2741 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2742 GdkPixbufLoader *loader;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2743 GdkPixbuf *pixbuf;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2744 guchar buffer [4096];
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2745 int length;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2746 FILE *f;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2747 struct {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2748 gint width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2749 gint height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2750 gboolean preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2751 } info;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2752 GdkPixbufAnimation *animation;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2753 GdkPixbufAnimationIter *iter;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2754 gboolean has_frame;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2755
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2756 g_return_val_if_fail (filename != NULL, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2757 g_return_val_if_fail (width > 0 || width == -1, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2758 g_return_val_if_fail (height > 0 || height == -1, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2759
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2760 f = g_fopen (filename, "rb");
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2761 if (!f) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2762 gint save_errno = errno;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2763 gchar *display_name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2764 g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (save_errno),
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2765 _("Failed to open file '%s': %s"),
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2766 display_name ? display_name : "(unknown)",
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2767 g_strerror (save_errno));
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2768 g_free (display_name);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2769 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2770 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2771
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2772 loader = gdk_pixbuf_loader_new ();
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2773
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2774 info.width = width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2775 info.height = height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2776 info.preserve_aspect_ratio = preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2777
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2778 g_signal_connect (loader, "size-prepared", G_CALLBACK (_gdk_file_scale_size_prepared_cb), &info);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2779
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2780 has_frame = FALSE;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2781 while (!has_frame && !feof (f) && !ferror (f)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2782 length = fread (buffer, 1, sizeof (buffer), f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2783 if (length > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2784 if (!gdk_pixbuf_loader_write (loader, buffer, length, error)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2785 gdk_pixbuf_loader_close (loader, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2786 fclose (f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2787 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2788 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2789 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2790
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2791 animation = gdk_pixbuf_loader_get_animation (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2792 if (animation) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2793 iter = gdk_pixbuf_animation_get_iter (animation, 0);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2794 if (!gdk_pixbuf_animation_iter_on_currently_loading_frame (iter)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2795 has_frame = TRUE;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2796 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2797 g_object_unref (iter);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2798 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2799 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2800
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2801 fclose (f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2802
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2803 if (!gdk_pixbuf_loader_close (loader, error) && !has_frame) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2804 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2805 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2806 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2807
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2808 pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2809
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2810 if (!pixbuf) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2811 gchar *display_name = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2812 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2813 g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_FAILED,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2814 _("Failed to load image '%s': reason not known, probably a corrupt image file"),
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2815 display_name ? display_name : "(unknown)");
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2816 g_free (display_name);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2817 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2818 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2819
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2820 g_object_ref (pixbuf);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2821
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2822 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2823
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2824 return pixbuf;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2825 }
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
2826 #endif /* ! Gtk 2.6.0 */
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2827
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2828 void gaim_gtk_set_custom_buddy_icon(GaimAccount *account, const char *who, const char *filename)
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2829 {
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2830 GaimConversation *conv;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2831 GaimBuddy *buddy;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2832 GaimBlistNode *node;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2833 char *path = NULL;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2834
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2835 buddy = gaim_find_buddy(account, who);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2836 if (!buddy) {
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2837 gaim_debug_info("custom-icon", "You can only set custom icon for someone in your buddylist.\n");
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2838 return;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2839 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2840
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2841 node = (GaimBlistNode*)gaim_buddy_get_contact(buddy);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2842 path = (char*)gaim_blist_node_get_string(node, "custom_buddy_icon");
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2843 if (path) {
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2844 struct stat st;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2845 if (g_stat(path, &st) == 0)
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2846 g_unlink(path);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2847 path = NULL;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2848 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2849
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2850 if (filename) {
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2851 char *newfile;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2852
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2853 newfile = gaim_gtk_convert_buddy_icon(gaim_find_prpl(gaim_account_get_protocol_id(account)),
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2854 filename);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2855 path = gaim_buddy_icons_get_full_path(newfile);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2856 g_free(newfile);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2857 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2858
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2859 gaim_blist_node_set_string(node, "custom_buddy_icon", path);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2860 g_free(path);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2861
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2862 /* Update the conversation */
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2863 conv = gaim_find_conversation_with_account(GAIM_CONV_TYPE_IM, who, account);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2864 if (conv)
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2865 gaim_conversation_update(conv, GAIM_CONV_UPDATE_ICON);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2866
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2867 /* Update the buddylist */
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2868 if (buddy)
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2869 gaim_blist_update_buddy_icon(buddy);
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2870 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2871
15084
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2872 char *gaim_gtk_make_pretty_arrows(const char *str)
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2873 {
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2874 char *ret;
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2875 char **split = g_strsplit(str, "->", -1);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2876 ret = g_strjoinv("\342\207\250", split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2877 g_strfreev(split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2878
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2879 split = g_strsplit(ret, "<-", -1);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2880 g_free(ret);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2881 ret = g_strjoinv("\342\207\246", split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2882 g_strfreev(split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2883
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2884 return ret;
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2885 }
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2886
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2887 void gaim_gtk_set_urgent(GtkWindow *window, gboolean urgent)
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2888 {
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2889 #if GTK_CHECK_VERSION(2,8,0)
15410
b56fbd3662b9 [gaim-migrate @ 18141]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15409
diff changeset
2890 gtk_window_set_urgency_hint(window, urgent);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2891 #elif defined _WIN32
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2892 gtkwgaim_window_flash(window, urgent);
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2893 #else
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2894 GdkWindow *gdkwin;
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2895 XWMHints *hints;
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2896
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2897 g_return_if_fail(window != NULL);
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2898
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2899 gdkwin = GTK_WIDGET(window)->window;
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2900
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2901 g_return_if_fail(gdkwin != NULL);
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2902
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2903 hints = XGetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2904 GDK_WINDOW_XWINDOW(gdkwin));
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2905 if(!hints)
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2906 hints = XAllocWMHints();
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2907
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2908 if (urgent)
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2909 hints->flags |= XUrgencyHint;
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2910 else
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2911 hints->flags &= ~XUrgencyHint;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2912 XSetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2913 GDK_WINDOW_XWINDOW(gdkwin), hints);
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2914 XFree(hints);
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2915 #endif
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2916 }
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2917
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2918 GSList *minidialogs = NULL;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2919
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2920 static void *
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2921 gaim_gtk_utils_get_handle()
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2922 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2923 static int handle;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2924
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2925 return &handle;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2926 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2927
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2928 static void connection_signed_off_cb(GaimConnection *gc)
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2929 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2930 GSList *list;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2931 for (list = minidialogs; list; list = list->next) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2932 if (g_object_get_data(G_OBJECT(list->data), "gc") == gc) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2933 gtk_widget_destroy(GTK_WIDGET(list->data));
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2934 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2935 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2936 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2937
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2938 static void alert_killed_cb(GtkWidget *widget)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2939 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2940 minidialogs = g_slist_remove(minidialogs, widget);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2941 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2942
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2943 void *gaim_gtk_make_mini_dialog(GaimConnection *gc, const char *icon_name,
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2944 const char *primary, const char *secondary,
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2945 void *user_data, ...)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2946 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2947 GtkWidget *vbox;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2948 GtkWidget *hbox;
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
2949 GtkWidget *hbox2;
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2950 GtkWidget *label;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2951 GtkWidget *button;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2952 GtkWidget *img = NULL;
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
2953 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2954 char label_text[2048];
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2955 const char *button_text;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2956 GCallback callback;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2957 char *primary_esc, *secondary_esc;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2958 va_list args;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2959 static gboolean first_call = TRUE;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2960
15497
92f02f4bd5ee Dialog icon changes
Sean Egan <seanegan@pidgin.im>
parents: 15496
diff changeset
2961 img = gtk_image_new_from_stock(icon_name, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2962 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2963
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2964 vbox = gtk_vbox_new(FALSE,0);
15410
b56fbd3662b9 [gaim-migrate @ 18141]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15409
diff changeset
2965 gtk_container_set_border_width(GTK_CONTAINER(vbox), GAIM_HIG_BOX_SPACE);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2966
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2967 g_object_set_data(G_OBJECT(vbox), "gc" ,gc);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2968 minidialogs = g_slist_prepend(minidialogs, vbox);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2969 g_signal_connect(G_OBJECT(vbox), "destroy", G_CALLBACK(alert_killed_cb), NULL);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2970
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2971 if (first_call) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2972 first_call = FALSE;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2973 gaim_signal_connect(gaim_connections_get_handle(), "signed-off",
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2974 gaim_gtk_utils_get_handle(),
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2975 GAIM_CALLBACK(connection_signed_off_cb), NULL);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2976 }
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2977
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2978 hbox = gtk_hbox_new(FALSE, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2979 gtk_container_add(GTK_CONTAINER(vbox), hbox);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2980
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2981 if (img != NULL)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2982 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2983
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2984 primary_esc = g_markup_escape_text(primary, -1);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2985
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2986 if (secondary)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2987 secondary_esc = g_markup_escape_text(secondary, -1);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2988 g_snprintf(label_text, sizeof(label_text),
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2989 "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>",
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2990 primary_esc, secondary ? "\n" : "", secondary?secondary_esc:"");
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2991 g_free(primary_esc);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2992 label = gtk_label_new(NULL);
15197
1d98528d4ee3 [gaim-migrate @ 17921]
Sean Egan <seanegan@pidgin.im>
parents: 15177
diff changeset
2993 gtk_widget_set_size_request(label, gaim_prefs_get_int("/gaim/gtk/blist/width")-25,-1);
15246
9663c7183a75 [gaim-migrate @ 17973]
Sean Egan <seanegan@pidgin.im>
parents: 15197
diff changeset
2994 gtk_label_set_markup(GTK_LABEL(label), label_text);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2995 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2996 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2997 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2998
15410
b56fbd3662b9 [gaim-migrate @ 18141]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15409
diff changeset
2999 hbox2 = gtk_hbox_new(FALSE, GAIM_HIG_BOX_SPACE);
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
3000 gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
3001
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3002 va_start(args, user_data);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3003 while ((button_text = va_arg(args, char*))) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3004 callback = va_arg(args, GCallback);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3005 button = gtk_button_new();
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
3006
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3007 if (callback)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3008 g_signal_connect_swapped(G_OBJECT(button), "clicked", callback, user_data);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3009 g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(gtk_widget_destroy), vbox);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3010 hbox = gtk_hbox_new(FALSE, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3011 gtk_container_add(GTK_CONTAINER(button), hbox);
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
3012 gtk_container_set_border_width(GTK_CONTAINER(hbox), 3);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3013 g_snprintf(label_text, sizeof(label_text),
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3014 "<span size=\"smaller\">%s</span>", button_text);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3015 label = gtk_label_new(NULL);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3016 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3017 gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3018 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
15114
4224e5db3ee4 [gaim-migrate @ 17836]
Mark Doliner <markdoliner@pidgin.im>
parents: 15096
diff changeset
3019 gtk_box_pack_end(GTK_BOX(hbox2), button, FALSE, FALSE, 0);
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
3020 gtk_size_group_add_widget(sg, button);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3021 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3022 va_end(args);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3023
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3024 return vbox;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
3025 }
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3026
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3027 /*
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3028 * "This is so dead sexy."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3029 * "Two thumbs up."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3030 * "Best movie of the year."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3031 *
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3032 * This is the function that handles CTRL+F searching in the buddy list.
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3033 * It finds the top-most buddy/group/chat/whatever containing the
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3034 * entered string.
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3035 *
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3036 * It's somewhat ineffecient, because we strip all the HTML from the
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3037 * "name" column of the buddy list (because the GtkTreeModel does not
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3038 * contain the screen name in a non-markedup format). But the alternative
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3039 * is to add an extra column to the GtkTreeModel. And this function is
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3040 * used rarely, so it shouldn't matter TOO much.
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3041 */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3042 gboolean gaim_gtk_tree_view_search_equal_func(GtkTreeModel *model, gint column,
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3043 const gchar *key, GtkTreeIter *iter, gpointer data)
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3044 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3045 gchar *enteredstring;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3046 gchar *tmp;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3047 gchar *withmarkup;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3048 gchar *nomarkup;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3049 gchar *normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3050 gboolean result;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3051 size_t i;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3052 size_t len;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3053 PangoLogAttr *log_attrs;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3054 gchar *word;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3055
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3056 if (strcasecmp(key, "Global Thermonuclear War") == 0)
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3057 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3058 gaim_notify_info(NULL, "WOPR",
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3059 "Wouldn't you prefer a nice game of chess?", NULL);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3060 return FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3061 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3062
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3063 gtk_tree_model_get(model, iter, column, &withmarkup, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3064 if (withmarkup == NULL) /* This is probably a separator */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3065 return TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3066
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3067 tmp = g_utf8_normalize(key, -1, G_NORMALIZE_DEFAULT);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3068 enteredstring = g_utf8_casefold(tmp, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3069 g_free(tmp);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3070
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3071 nomarkup = gaim_markup_strip_html(withmarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3072 tmp = g_utf8_normalize(nomarkup, -1, G_NORMALIZE_DEFAULT);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3073 g_free(nomarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3074 normalized = g_utf8_casefold(tmp, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3075 g_free(tmp);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3076
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3077 if (gaim_str_has_prefix(normalized, enteredstring))
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3078 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3079 g_free(withmarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3080 g_free(enteredstring);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3081 g_free(normalized);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3082 return FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3083 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3084
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3085
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3086 /* Use Pango to separate by words. */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3087 len = g_utf8_strlen(normalized, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3088 log_attrs = g_new(PangoLogAttr, len + 1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3089
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3090 pango_get_log_attrs(normalized, strlen(normalized), -1, NULL, log_attrs, len + 1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3091
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3092 word = normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3093 result = TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3094 for (i = 0; i < (len - 1) ; i++)
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3095 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3096 if (log_attrs[i].is_word_start &&
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3097 gaim_str_has_prefix(word, enteredstring))
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3098 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3099 result = FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3100 break;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3101 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3102 word = g_utf8_next_char(word);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3103 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3104 g_free(log_attrs);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3105
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3106 /* The non-Pango version. */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3107 #if 0
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3108 word = normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3109 result = TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3110 while (word[0] != '\0')
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3111 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3112 gunichar c = g_utf8_get_char(word);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3113 if (!g_unichar_isalnum(c))
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3114 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3115 word = g_utf8_find_next_char(word, NULL);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3116 if (gaim_str_has_prefix(word, enteredstring))
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3117 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3118 result = FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3119 break;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3120 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3121 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3122 else
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3123 word = g_utf8_find_next_char(word, NULL);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3124 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3125 #endif
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3126
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3127 g_free(withmarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3128 g_free(enteredstring);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3129 g_free(normalized);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3130
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3131 return result;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3132 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3133
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3134
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3135 gboolean gaim_gdk_pixbuf_is_opaque(GdkPixbuf *pixbuf) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3136 int width, height, rowstride, i;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3137 unsigned char *pixels;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3138 unsigned char *row;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3139
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3140 if (!gdk_pixbuf_get_has_alpha(pixbuf))
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3141 return TRUE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3142
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3143 width = gdk_pixbuf_get_width (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3144 height = gdk_pixbuf_get_height (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3145 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3146 pixels = gdk_pixbuf_get_pixels (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3147
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3148 row = pixels;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3149 for (i = 3; i < rowstride; i+=4) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3150 if (row[i] != 0xff)
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3151 return FALSE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3152 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3153
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3154 for (i = 1; i < height - 1; i++) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3155 row = pixels + (i*rowstride);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3156 if (row[3] != 0xff || row[rowstride-1] != 0xff) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3157 printf("0: %d, last: %d\n", row[3], row[rowstride-1]);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3158 return FALSE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3159 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3160 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3161
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3162 row = pixels + ((height-1) * rowstride);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3163 for (i = 3; i < rowstride; i+=4) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3164 if (row[i] != 0xff)
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3165 return FALSE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3166 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3167
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3168 return TRUE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3169 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3170
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3171 #if !GTK_CHECK_VERSION(2,2,0)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3172 GtkTreePath *
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3173 gtk_tree_path_new_from_indices (gint first_index, ...)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3174 {
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3175 int arg;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3176 va_list args;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3177 GtkTreePath *path;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3178
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3179 path = gtk_tree_path_new ();
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3180
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3181 va_start (args, first_index);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3182 arg = first_index;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3183
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3184 while (arg != -1)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3185 {
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3186 gtk_tree_path_append_index (path, arg);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3187 arg = va_arg (args, gint);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3188 }
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3189
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3190 va_end (args);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3191
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3192 return path;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3193 }
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3194 #endif

mercurial