pidgin/gtkutils.c

Wed, 10 Oct 2007 01:01:21 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Wed, 10 Oct 2007 01:01:21 +0000
changeset 20895
d8cf51630588
parent 20723
30b2e81fc8cb
child 20976
c5cf79b99382
child 21172
97f1a22adfcf
child 21189
8e296c093662
permissions
-rw-r--r--

Fix CID 353

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
16254
eeb2bba4dc94 Rename the Doxygen group from gtkui to pidgin.
Richard Laager <rlaager@pidgin.im>
parents: 16123
diff changeset
3 * @ingroup pidgin
20147
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 20036
diff changeset
4 */
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 20036
diff changeset
5
66f05a854eee applied changes from 8a731bbd0197fbcc91a705c2d8f528154216defa
Richard Laager <rlaager@pidgin.im>
parents: 20036
diff changeset
6 /* pidgin
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 *
15931
716b5fac1895 Re-sed the copyright notices so they don't all talk about Purple.
Richard Laager <rlaager@pidgin.im>
parents: 15884
diff changeset
8 * Pidgin is the legal property of its developers, whose names are too numerous
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
9 * 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
10 * source distribution.
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 6846
diff changeset
11 *
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * 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
14 * the Free Software Foundation; either version 2 of the License, or
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * (at your option) any later version.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * GNU General Public License for more details.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 19547
diff changeset
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 */
9791
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9767
diff changeset
26 #include "internal.h"
15577
b8129373f65e More pidgin changes
Sean Egan <seanegan@pidgin.im>
parents: 15568
diff changeset
27 #include "pidgin.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
28
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 #ifndef _WIN32
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
30 # include <X11/Xlib.h>
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31 #else
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
32 # ifdef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
33 # undef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
34 # endif
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 #endif /*_WIN32*/
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
36
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
37 #ifdef USE_GTKSPELL
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
38 # include <gtkspell/gtkspell.h>
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
39 # ifdef _WIN32
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
40 # include "wspell.h"
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 #endif
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
43
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 #include <gdk/gdkkeysyms.h>
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
45
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
46 #include "conversation.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
47 #include "debug.h"
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
48 #include "desktopitem.h"
7078
0d63d673f170 [gaim-migrate @ 7643]
Nathan Walp <nwalp@pidgin.im>
parents: 7060
diff changeset
49 #include "imgstore.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
50 #include "notify.h"
5548
200682124464 [gaim-migrate @ 5949]
Nathan Walp <nwalp@pidgin.im>
parents: 5530
diff changeset
51 #include "prefs.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52 #include "prpl.h"
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
53 #include "request.h"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
54 #include "signals.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
55 #include "util.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
56
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
57 #include "gtkconv.h"
9709
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9706
diff changeset
58 #include "gtkdialogs.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
59 #include "gtkimhtml.h"
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
60 #include "gtkimhtmltoolbar.h"
15883
969b74a3e27a According to etags, pidgin/ should be completely clean of references to 'gaim' as a client
Sean Egan <seanegan@pidgin.im>
parents: 15882
diff changeset
61 #include "pidginstock.h"
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
62 #include "gtkthemes.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
63 #include "gtkutils.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64
17118
4fbaa628dd8e Formatting changes.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17117
diff changeset
65 typedef struct {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
66 GtkWidget *menu;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
67 gint default_item;
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
68 } AopMenu;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
69
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
70 static guint accels_save_timer = 0;
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
71
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
72 static gboolean
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
73 url_clicked_idle_cb(gpointer data)
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
74 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
75 purple_notify_uri(NULL, data);
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
76 g_free(data);
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
77 return FALSE;
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
78 }
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
79
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
80 static void
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
81 url_clicked_cb(GtkWidget *w, const char *uri)
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
82 {
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
83 g_idle_add(url_clicked_idle_cb, g_strdup(uri));
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
84 }
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
85
10871
c0282a4f2250 [gaim-migrate @ 12558]
Mark Doliner <markdoliner@pidgin.im>
parents: 10850
diff changeset
86 static GtkIMHtmlFuncs gtkimhtml_cbs = {
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16314
diff changeset
87 (GtkIMHtmlGetImageFunc)purple_imgstore_find_by_id,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
88 (GtkIMHtmlGetImageDataFunc)purple_imgstore_get_data,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
89 (GtkIMHtmlGetImageSizeFunc)purple_imgstore_get_size,
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
90 (GtkIMHtmlGetImageFilenameFunc)purple_imgstore_get_filename,
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16314
diff changeset
91 purple_imgstore_ref_by_id,
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16314
diff changeset
92 purple_imgstore_unref_by_id,
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
93 };
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
94
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 void
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
96 pidgin_setup_imhtml(GtkWidget *imhtml)
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 {
17487
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
98 PangoFontDescription *desc = NULL;
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 g_return_if_fail(imhtml != NULL);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 g_return_if_fail(GTK_IS_IMHTML(imhtml));
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 g_signal_connect(G_OBJECT(imhtml), "url_clicked",
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
103 G_CALLBACK(url_clicked_cb), NULL);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104
16263
27e0ef0f38e6 Word on the street is that we don't want things named pidginfoo_bar(), but
Richard Laager <rlaager@pidgin.im>
parents: 16254
diff changeset
105 pidgin_themes_smiley_themeize(imhtml);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
106
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
107 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
108
17487
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
109 if (!purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/use_theme_font")) {
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
110 const char *font = purple_prefs_get_string(PIDGIN_PREFS_ROOT "/conversations/custom_font");
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
111 desc = pango_font_description_from_string(font);
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
112 } else if (purple_running_gnome()) {
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
113 /* Use the GNOME "document" font, if applicable */
20895
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
114 char *path;
17030
2685caae6d1f Fix #459 - Choose buddy icon UI doesn't list the current directory. The "update-preview" signal cb must call gtk_file_chooser_set_preview_widget_active().
Daniel Atallah <datallah@pidgin.im>
parents: 17013
diff changeset
115
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
116 if ((path = g_find_program_in_path("gconftool-2"))) {
20895
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
117 char *font = NULL;
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
118 g_free(path);
20895
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
119 if (g_spawn_command_line_sync(
17030
2685caae6d1f Fix #459 - Choose buddy icon UI doesn't list the current directory. The "update-preview" signal cb must call gtk_file_chooser_set_preview_widget_active().
Daniel Atallah <datallah@pidgin.im>
parents: 17013
diff changeset
120 "gconftool-2 -g /desktop/gnome/interface/document_font_name",
20895
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
121 &font, NULL, NULL, NULL)) {
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
122 desc = pango_font_description_from_string(font);
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
123 }
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
124 g_free(font);
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
125 }
17487
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
126 }
20895
d8cf51630588 Fix CID 353
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 20723
diff changeset
127
17487
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
128 if (desc) {
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
129 gtk_widget_modify_font(imhtml, desc);
2d9c6631e922 Reluctantly, I've added a preference for overriding the GTK+ default theme in GtkIMHtml widgets. There is support for this feature in the GNOME HIG and in other GTK+ (including GNOME) applications. This fixes #494. This is a GTK+ 2.4-only feature. I don't update the fonts in existing gtkimhtml's yet, only in new ones. Someone else may want to take care of that
Sean Egan <seanegan@pidgin.im>
parents: 17385
diff changeset
130 pango_font_description_free(desc);
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
131 }
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
132 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
133
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
134 GtkWidget *
17213
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
135 pidgin_create_window(const char *title, guint border_width, const char *role, gboolean resizable)
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
136 {
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
137 GtkWindow *wnd = NULL;
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
138
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
139 wnd = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
140 if (title)
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
141 gtk_window_set_title(wnd, title);
18941
995cf072aa9b Prevent some more window titles from being "pidgin.exe" on Windows. Fixes #1767
Daniel Atallah <datallah@pidgin.im>
parents: 18672
diff changeset
142 #ifdef _WIN32
995cf072aa9b Prevent some more window titles from being "pidgin.exe" on Windows. Fixes #1767
Daniel Atallah <datallah@pidgin.im>
parents: 18672
diff changeset
143 else
995cf072aa9b Prevent some more window titles from being "pidgin.exe" on Windows. Fixes #1767
Daniel Atallah <datallah@pidgin.im>
parents: 18672
diff changeset
144 gtk_window_set_title(wnd, PIDGIN_ALERT_TITLE);
995cf072aa9b Prevent some more window titles from being "pidgin.exe" on Windows. Fixes #1767
Daniel Atallah <datallah@pidgin.im>
parents: 18672
diff changeset
145 #endif
17213
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
146 gtk_container_set_border_width(GTK_CONTAINER(wnd), border_width);
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
147 if (role)
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
148 gtk_window_set_role(wnd, role);
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
149 gtk_window_set_resizable(wnd, resizable);
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
150
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
151 return GTK_WIDGET(wnd);
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
152 }
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
153
25a0ae0d0ff7 Added to gtkutils.c:
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
154 GtkWidget *
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
155 pidgin_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
156 {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
157 GtkWidget *frame;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
158 GtkWidget *imhtml;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
159 GtkWidget *sep;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
160 GtkWidget *sw;
10177
9471d38bd527 [gaim-migrate @ 11292]
Christian Hammond <chipx86@chipx86.com>
parents: 10175
diff changeset
161 GtkWidget *toolbar = NULL;
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
162 GtkWidget *vbox;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
163
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
164 frame = gtk_frame_new(NULL);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
165 gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
166
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
167 vbox = gtk_vbox_new(FALSE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
168 gtk_container_add(GTK_CONTAINER(frame), vbox);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
169 gtk_widget_show(vbox);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
170
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
171 if (editable) {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
172 toolbar = gtk_imhtmltoolbar_new();
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
173 gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
174 gtk_widget_show(toolbar);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
176 sep = gtk_hseparator_new();
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
177 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
178 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
179 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
180 gtk_widget_show(sep);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
181 }
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
182
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
183 sw = gtk_scrolled_window_new(NULL, NULL);
13203
bdb98c8e5b56 [gaim-migrate @ 15565]
Mark Doliner <markdoliner@pidgin.im>
parents: 13114
diff changeset
184 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw),
18417
88a1c65eaad3 When the scrolled window is set to GTK_POLICY_NEVER, the scrolledwindow will increase its size request when there's enough text in the imhtml to warrent it. Turning the policy to AUTOMATIC makes the text wordwrap the way we want
Sean Egan <seanegan@pidgin.im>
parents: 18351
diff changeset
185 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
186 gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
187 gtk_widget_show(sw);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
188
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
189 imhtml = gtk_imhtml_new(NULL, NULL);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
190 gtk_imhtml_set_editable(GTK_IMHTML(imhtml), editable);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
191 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
192 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
193 #ifdef USE_GTKSPELL
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16071
diff changeset
194 if (editable && purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/conversations/spellcheck"))
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
195 pidgin_setup_gtkspell(GTK_TEXT_VIEW(imhtml));
12651
be8208c28eaa [gaim-migrate @ 14992]
Mark Doliner <markdoliner@pidgin.im>
parents: 12595
diff changeset
196 #endif
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
197 gtk_widget_show(imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
198
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
199 if (editable) {
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
200 gtk_imhtmltoolbar_attach(GTK_IMHTMLTOOLBAR(toolbar), imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
201 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(toolbar), "default");
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
202 }
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
203 pidgin_setup_imhtml(imhtml);
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
204
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
205 gtk_container_add(GTK_CONTAINER(sw), imhtml);
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
206
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
207 if (imhtml_ret != NULL)
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
208 *imhtml_ret = imhtml;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
209
10181
2425c3773266 [gaim-migrate @ 11296]
Mark Doliner <markdoliner@pidgin.im>
parents: 10177
diff changeset
210 if (editable && (toolbar_ret != NULL))
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
211 *toolbar_ret = toolbar;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
212
13281
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
213 if (sw_ret != NULL)
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
214 *sw_ret = sw;
3558cb15ebb9 [gaim-migrate @ 15646]
Richard Laager <rlaager@pidgin.im>
parents: 13203
diff changeset
215
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
216 return frame;
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
217 }
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
218
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
220 pidgin_set_sensitive_if_input(GtkWidget *entry, GtkWidget *dialog)
7751
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
221 {
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
222 const char *text = gtk_entry_get_text(GTK_ENTRY(entry));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
223 gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
224 (*text != '\0'));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
225 }
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
226
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
227 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
228 pidgin_toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle)
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
230 gboolean sensitivity;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
231
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
232 if (to_toggle == NULL)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
233 return;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
234
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
235 sensitivity = GTK_WIDGET_IS_SENSITIVE(to_toggle);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
236
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 gtk_widget_set_sensitive(to_toggle, !sensitivity);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
239
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
240 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
241 pidgin_toggle_sensitive_array(GtkWidget *w, GPtrArray *data)
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
242 {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
243 gboolean sensitivity;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
244 gpointer element;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
245 int i;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
246
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
247 for (i=0; i < data->len; i++) {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
248 element = g_ptr_array_index(data,i);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
249 if (element == NULL)
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
250 continue;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
251
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
252 sensitivity = GTK_WIDGET_IS_SENSITIVE(element);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
253
10175
2bf5ed145e8a [gaim-migrate @ 11290]
Mark Doliner <markdoliner@pidgin.im>
parents: 10061
diff changeset
254 gtk_widget_set_sensitive(element, !sensitivity);
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
255 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
256 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
257
8901
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
258 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
259 pidgin_toggle_showhide(GtkWidget *widget, GtkWidget *to_toggle)
8901
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
260 {
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
261 if (to_toggle == NULL)
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
262 return;
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
263
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
264 if (GTK_WIDGET_VISIBLE(to_toggle))
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
265 gtk_widget_hide(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
266 else
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
267 gtk_widget_show(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
268 }
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
269
17359
6dd3b7730470 Change pidgin_separator to return the separator added to the menu.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17155
diff changeset
270 GtkWidget *pidgin_separator(GtkWidget *menu)
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
271 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
272 GtkWidget *menuitem;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
273
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
274 menuitem = gtk_separator_menu_item_new();
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
275 gtk_widget_show(menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
276 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
17359
6dd3b7730470 Change pidgin_separator to return the separator added to the menu.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17155
diff changeset
277 return menuitem;
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
278 }
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
279
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
280 GtkWidget *pidgin_new_item(GtkWidget *menu, const char *str)
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
281 {
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
282 GtkWidget *menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
283 GtkWidget *label;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
284
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
285 menuitem = gtk_menu_item_new();
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
286 if (menu)
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
287 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
288 gtk_widget_show(menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
289
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
290 label = gtk_label_new(str);
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6236
diff changeset
291 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
292 gtk_label_set_pattern(GTK_LABEL(label), "_");
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
293 gtk_container_add(GTK_CONTAINER(menuitem), label);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
294 gtk_widget_show(label);
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
295 /* FIXME: Go back and fix this
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
296 gtk_widget_add_accelerator(menuitem, "activate", accel, str[0],
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
297 GDK_MOD1_MASK, GTK_ACCEL_LOCKED);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
298 */
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
299 pidgin_set_accessible_label (menuitem, label);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
300 return menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
301 }
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
302
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
303 GtkWidget *pidgin_new_check_item(GtkWidget *menu, const char *str,
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
304 GtkSignalFunc sf, gpointer data, gboolean checked)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
305 {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
306 GtkWidget *menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
307 menuitem = gtk_check_menu_item_new_with_mnemonic(str);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
308
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
309 if (menu)
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
310 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
311
7299
4c804d9a52f1 [gaim-migrate @ 7883]
Christian Hammond <chipx86@chipx86.com>
parents: 7118
diff changeset
312 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
313
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
314 if (sf)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
315 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
316
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
317 gtk_widget_show_all(menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
318
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
319 return menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
320 }
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
321
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
322 GtkWidget *
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
323 pidgin_pixbuf_toolbar_button_from_stock(const char *icon)
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
324 {
9706
d5b657fe9cff [gaim-migrate @ 10567]
Mark Doliner <markdoliner@pidgin.im>
parents: 9534
diff changeset
325 GtkWidget *button, *image, *bbox;
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
326
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
327 button = gtk_toggle_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
328 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
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 bbox = gtk_vbox_new(FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
331
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
332 gtk_container_add (GTK_CONTAINER(button), bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
333
15623
bf485c598199 toolbar/menu icons. reduce the imhtmltoolbar spacing. more gaimstock pruning
Sean Egan <seanegan@pidgin.im>
parents: 15578
diff changeset
334 image = gtk_image_new_from_stock(icon, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
335 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
336
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
337 gtk_widget_show_all(bbox);
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 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
340 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
341
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
342 GtkWidget *
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
343 pidgin_pixbuf_button_from_stock(const char *text, const char *icon,
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
344 PidginButtonOrientation style)
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
345 {
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
346 GtkWidget *button, *image, *label, *bbox, *ibox, *lbox = NULL;
6372
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 button = gtk_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
349
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
350 if (style == PIDGIN_BUTTON_HORIZONTAL) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
351 bbox = gtk_hbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
352 ibox = gtk_hbox_new(FALSE, 0);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
353 if (text)
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
354 lbox = gtk_hbox_new(FALSE, 0);
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
355 } else {
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
356 bbox = gtk_vbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
357 ibox = gtk_vbox_new(FALSE, 0);
10504
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
358 if (text)
eae130eefbfe [gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 10483
diff changeset
359 lbox = gtk_vbox_new(FALSE, 0);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
360 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
361
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
362 gtk_container_add(GTK_CONTAINER(button), bbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
363
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
364 if (icon) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
365 gtk_box_pack_start_defaults(GTK_BOX(bbox), ibox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
366 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
367 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
368 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
369
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
370 if (text) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
371 gtk_box_pack_start_defaults(GTK_BOX(bbox), lbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
372 label = gtk_label_new(NULL);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
373 gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
374 gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
9767
c68cfe03deec [gaim-migrate @ 10635]
Mark Doliner <markdoliner@pidgin.im>
parents: 9750
diff changeset
375 gtk_box_pack_start(GTK_BOX(lbox), label, FALSE, TRUE, 0);
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
376 pidgin_set_accessible_label (button, label);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
377 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
378
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
379 gtk_widget_show_all(bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
380
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
381 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
382 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
383
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
384
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
385 GtkWidget *pidgin_new_item_from_stock(GtkWidget *menu, const char *str, const char *icon, GtkSignalFunc sf, gpointer data, guint accel_key, guint accel_mods, char *mod)
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
386 {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
387 GtkWidget *menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
388 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
389 GtkWidget *hbox;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
390 GtkWidget *label;
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 GtkWidget *image;
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 if (icon == NULL)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
395 menuitem = gtk_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
396 else
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
397 menuitem = gtk_image_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
398
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
399 if (menu)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
400 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
401
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
402 if (sf)
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
403 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
404
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
405 if (icon != NULL) {
15623
bf485c598199 toolbar/menu icons. reduce the imhtmltoolbar spacing. more gaimstock pruning
Sean Egan <seanegan@pidgin.im>
parents: 15578
diff changeset
406 image = gtk_image_new_from_stock(icon, gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_EXTRA_SMALL));
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
407 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
408 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
409 /* FIXME: this isn't right
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
410 if (mod) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
411 label = gtk_label_new(mod);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
412 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
413 gtk_widget_show(label);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
414 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
415 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
416 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
417 if (accel_key) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
418 gtk_widget_add_accelerator(menuitem, "activate", accel, accel_key,
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
419 accel_mods, GTK_ACCEL_LOCKED);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
420 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
421 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
422
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
423 gtk_widget_show_all(menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
424
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
425 return menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
426 }
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
427
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
428 GtkWidget *
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
429 pidgin_make_frame(GtkWidget *parent, const char *title)
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
430 {
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
431 GtkWidget *vbox, *label, *hbox;
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
432 char *labeltitle;
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
433
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
434 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
435 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
436 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
437
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
438 label = gtk_label_new(NULL);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
439
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
440 labeltitle = g_strdup_printf("<span weight=\"bold\">%s</span>", title);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
441 gtk_label_set_markup(GTK_LABEL(label), labeltitle);
13100
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
442 g_free(labeltitle);
56bf8002ddc6 [gaim-migrate @ 15461]
Richard Laager <rlaager@pidgin.im>
parents: 13092
diff changeset
443
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
444 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
445 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
446 gtk_widget_show(label);
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
447 pidgin_set_accessible_label (vbox, label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
448
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
449 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
450 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
451 gtk_widget_show(hbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
452
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
453 label = gtk_label_new(" ");
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
454 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
455 gtk_widget_show(label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
456
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
457 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
458 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
459 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
460
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
461 return vbox;
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
462 }
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
463
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
464 static gpointer
17118
4fbaa628dd8e Formatting changes.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17117
diff changeset
465 aop_option_menu_get_selected(GtkWidget *optmenu, GtkWidget **p_item)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
466 {
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
467 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
468 GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu));
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
469 if (p_item)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
470 (*p_item) = item;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
471 return g_object_get_data(G_OBJECT(item), "aop_per_item_data");
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
472 }
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
473
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
474 static void
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
475 aop_menu_cb(GtkWidget *optmenu, GCallback cb)
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
476 {
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
477 GtkWidget *item;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
478 gpointer per_item_data;
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
479
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
480 per_item_data = aop_option_menu_get_selected(optmenu, &item);
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
481
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
482 if (cb != NULL) {
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
483 ((void (*)(GtkWidget *, gpointer, gpointer))cb)(item, per_item_data, g_object_get_data(G_OBJECT(optmenu), "user_data"));
17237
77ee6a7263dc Add some braces and clean up indentation.
Richard Laager <rlaager@pidgin.im>
parents: 17236
diff changeset
484 }
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
485 }
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
486
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
487 static GtkWidget *
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
488 aop_menu_item_new(GtkSizeGroup *sg, GdkPixbuf *pixbuf, const char *lbl, gpointer per_item_data, const char *data)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
489 {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
490 GtkWidget *item;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
491 GtkWidget *hbox;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
492 GtkWidget *image;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
493 GtkWidget *label;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
494
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
495 item = gtk_menu_item_new();
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
496 gtk_widget_show(item);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
497
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
498 hbox = gtk_hbox_new(FALSE, 4);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
499 gtk_widget_show(hbox);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
500
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
501 /* Create the image */
17238
22c1b67b96d4 Fix a logic mistake I introduced during a cleanup.
Richard Laager <rlaager@pidgin.im>
parents: 17237
diff changeset
502 if (pixbuf == NULL)
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
503 image = gtk_image_new();
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
504 else
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
505 image = gtk_image_new_from_pixbuf(pixbuf);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
506 gtk_widget_show(image);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
507
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
508 if (sg)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
509 gtk_size_group_add_widget(sg, image);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
510
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
511 /* Create the label */
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
512 label = gtk_label_new (lbl);
17377
136e8a8b76da Forgot an instance of g_object_new and some other changes are necessary, too.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17375
diff changeset
513 gtk_widget_show (label);
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
514 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
17377
136e8a8b76da Forgot an instance of g_object_new and some other changes are necessary, too.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17375
diff changeset
515 gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
516
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
517 gtk_container_add(GTK_CONTAINER(item), hbox);
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
518 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
519 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
520
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
521 g_object_set_data(G_OBJECT (item), data, per_item_data);
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
522 g_object_set_data(G_OBJECT (item), "aop_per_item_data", per_item_data);
17118
4fbaa628dd8e Formatting changes.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17117
diff changeset
523
4fbaa628dd8e Formatting changes.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17117
diff changeset
524 pidgin_set_accessible_label(item, label);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
525
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
526 return item;
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
527 }
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
528
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
529 static GdkPixbuf *
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
530 pidgin_create_prpl_icon_from_prpl(PurplePlugin *prpl, PidginPrplIconSize size, PurpleAccount *account)
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
531 {
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
532 PurplePluginProtocolInfo *prpl_info;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
533 const char *protoname = NULL;
18216
f34603f4631e Use dynamic string manipulation to get rid of a MAXPATHLEN.
Richard Laager <rlaager@pidgin.im>
parents: 18193
diff changeset
534 char *tmp;
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
535 char *filename = NULL;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
536 GdkPixbuf *pixbuf;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
537
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
538 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl);
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
539 if (prpl_info->list_icon == NULL)
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
540 return NULL;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
541
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
542 protoname = prpl_info->list_icon(account, NULL);
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
543 if (protoname == NULL)
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
544 return NULL;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
545
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
546 /*
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
547 * Status icons will be themeable too, and then it will look up
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
548 * protoname from the theme
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
549 */
18216
f34603f4631e Use dynamic string manipulation to get rid of a MAXPATHLEN.
Richard Laager <rlaager@pidgin.im>
parents: 18193
diff changeset
550 tmp = g_strconcat(protoname, ".png", NULL);
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
551
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
552 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
553 size == PIDGIN_PRPL_ICON_SMALL ? "16" :
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
554 size == PIDGIN_PRPL_ICON_MEDIUM ? "22" : "48",
18216
f34603f4631e Use dynamic string manipulation to get rid of a MAXPATHLEN.
Richard Laager <rlaager@pidgin.im>
parents: 18193
diff changeset
555 tmp, NULL);
f34603f4631e Use dynamic string manipulation to get rid of a MAXPATHLEN.
Richard Laager <rlaager@pidgin.im>
parents: 18193
diff changeset
556 g_free(tmp);
f34603f4631e Use dynamic string manipulation to get rid of a MAXPATHLEN.
Richard Laager <rlaager@pidgin.im>
parents: 18193
diff changeset
557
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
558 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
559 g_free(filename);
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
560
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
561 return pixbuf;
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
562 }
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
563
17014
1e90cfae53dd disapproval of revision '41be962a27d1633445fef2055c4a0db183f104dc'
Richard Laager <rlaager@pidgin.im>
parents: 17013
diff changeset
564 static GtkWidget *
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
565 aop_option_menu_new(AopMenu *aop_menu, GCallback cb, gpointer user_data)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
566 {
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
567 GtkWidget *optmenu;
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
568
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
569 optmenu = gtk_option_menu_new();
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
570 gtk_widget_show(optmenu);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
571 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), aop_menu->menu);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
572
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
573 if (aop_menu->default_item != -1)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
574 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), aop_menu->default_item);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
575
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
576 g_object_set_data_full(G_OBJECT(optmenu), "aop_menu", aop_menu, (GDestroyNotify)g_free);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
577 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
578
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
579 g_signal_connect(G_OBJECT(optmenu), "changed", G_CALLBACK(aop_menu_cb), cb);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
580
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
581 return optmenu;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
582 }
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
583
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
584 static void
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
585 aop_option_menu_replace_menu(GtkWidget *optmenu, AopMenu *new_aop_menu)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
586 {
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
587 if (gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)))
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
588 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
589
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
590 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), new_aop_menu->menu);
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
591
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
592 if (new_aop_menu->default_item != -1)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
593 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), new_aop_menu->default_item);
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
594
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
595 g_object_set_data_full(G_OBJECT(optmenu), "aop_menu", new_aop_menu, (GDestroyNotify)g_free);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
596 }
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
597
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
598 static void
17118
4fbaa628dd8e Formatting changes.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17117
diff changeset
599 aop_option_menu_select_by_data(GtkWidget *optmenu, gpointer data)
17014
1e90cfae53dd disapproval of revision '41be962a27d1633445fef2055c4a0db183f104dc'
Richard Laager <rlaager@pidgin.im>
parents: 17013
diff changeset
600 {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
601 guint idx;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
602 GList *llItr = NULL;
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
603
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
604 for (idx = 0, llItr = GTK_MENU_SHELL(gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)))->children;
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
605 llItr != NULL;
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
606 llItr = llItr->next, idx++) {
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
607 if (data == g_object_get_data(G_OBJECT(llItr->data), "aop_per_item_data")) {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
608 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), idx);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
609 break;
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
610 }
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
611 }
17014
1e90cfae53dd disapproval of revision '41be962a27d1633445fef2055c4a0db183f104dc'
Richard Laager <rlaager@pidgin.im>
parents: 17013
diff changeset
612 }
1e90cfae53dd disapproval of revision '41be962a27d1633445fef2055c4a0db183f104dc'
Richard Laager <rlaager@pidgin.im>
parents: 17013
diff changeset
613
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
614 static AopMenu *
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
615 create_protocols_menu(const char *default_proto_id)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
616 {
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
617 AopMenu *aop_menu = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
618 PurplePluginProtocolInfo *prpl_info;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
619 PurplePlugin *plugin;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
620 GdkPixbuf *pixbuf = NULL;
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
621 GtkSizeGroup *sg;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
622 GList *p;
17236
4bd0f7e562e7 Apply some constification.
Richard Laager <rlaager@pidgin.im>
parents: 17235
diff changeset
623 const char *gtalk_name = NULL;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
624 int i;
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
625
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
626 aop_menu = g_malloc0(sizeof(AopMenu));
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
627 aop_menu->default_item = -1;
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
628 aop_menu->menu = gtk_menu_new();
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
629 gtk_widget_show(aop_menu->menu);
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
630 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
17098
3e4159d270d3 Only include Google Talk if we have XMPP.
Richard Laager <rlaager@pidgin.im>
parents: 17092
diff changeset
631
3e4159d270d3 Only include Google Talk if we have XMPP.
Richard Laager <rlaager@pidgin.im>
parents: 17092
diff changeset
632 if (purple_find_prpl("prpl-jabber"))
17116
122d4dcce40e Patch from Gabriel Schulhof to fix the Google-Talk selection.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17098
diff changeset
633 gtalk_name = _("Google Talk");
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
634
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
635 for (p = purple_plugins_get_protocols(), i = 0;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
636 p != NULL;
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
637 p = p->next, i++) {
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
638
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
639 plugin = (PurplePlugin *)p->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
640 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
641
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
642 if (gtalk_name && strcmp(gtalk_name, plugin->info->name) < 0) {
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
643 char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
644 "16", "google-talk.png", NULL);
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
645 GtkWidget *item;
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
646
17092
11d23a81eabd Sort Google Talk appropriately.
Richard Laager <rlaager@pidgin.im>
parents: 17046
diff changeset
647 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
11d23a81eabd Sort Google Talk appropriately.
Richard Laager <rlaager@pidgin.im>
parents: 17046
diff changeset
648 g_free(filename);
11d23a81eabd Sort Google Talk appropriately.
Richard Laager <rlaager@pidgin.im>
parents: 17046
diff changeset
649
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
650 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
651 item = aop_menu_item_new(sg, pixbuf, gtalk_name, "prpl-jabber", "protocol"));
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
652 g_object_set_data(G_OBJECT(item), "fake", GINT_TO_POINTER(1));
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
653
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
654 if (pixbuf)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
655 g_object_unref(pixbuf);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
656
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
657 gtalk_name = NULL;
17527
52201c2338cf Fix for the protocol type being off by one in modify account dialog
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17497
diff changeset
658 i++;
17092
11d23a81eabd Sort Google Talk appropriately.
Richard Laager <rlaager@pidgin.im>
parents: 17046
diff changeset
659 }
11d23a81eabd Sort Google Talk appropriately.
Richard Laager <rlaager@pidgin.im>
parents: 17046
diff changeset
660
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
661 pixbuf = pidgin_create_prpl_icon_from_prpl(plugin, PIDGIN_PRPL_ICON_SMALL, NULL);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
662
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
663 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
664 aop_menu_item_new(sg, pixbuf, plugin->info->name, plugin->info->id, "protocol"));
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
665
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
666 if (pixbuf)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
667 g_object_unref(pixbuf);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
668
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
669 if (default_proto_id != NULL && !strcmp(plugin->info->id, default_proto_id))
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
670 aop_menu->default_item = i;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
671 }
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
672
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
673 g_object_unref(sg);
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
674
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
675 return aop_menu;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
676 }
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
677
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
678 GtkWidget *
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
679 pidgin_protocol_option_menu_new(const char *id, GCallback cb,
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
680 gpointer user_data)
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
681 {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
682 return aop_option_menu_new(create_protocols_menu(id), cb, user_data);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
683 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
684
18672
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
685 const char *
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
686 pidgin_protocol_option_menu_get_selected(GtkWidget *optmenu)
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
687 {
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
688 return (const char *)aop_option_menu_get_selected(optmenu, NULL);
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
689 }
da4db1be5d98 Patch from nix_nix, adds 'get prpl name from account menu' API
Sean Egan <seanegan@pidgin.im>
parents: 18417
diff changeset
690
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
691 PurpleAccount *
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
692 pidgin_account_option_menu_get_selected(GtkWidget *optmenu)
8940
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
693 {
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
694 return (PurpleAccount *)aop_option_menu_get_selected(optmenu, NULL);
8940
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
695 }
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
696
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
697 static AopMenu *
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
698 create_account_menu(PurpleAccount *default_account,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
699 PurpleFilterAccountFunc filter_func, gboolean show_all)
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
700 {
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
701 AopMenu *aop_menu = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
702 PurpleAccount *account;
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
703 GdkPixbuf *pixbuf = NULL;
18122
9bf9970c1b6a disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents: 18121
diff changeset
704 GList *list;
9bf9970c1b6a disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents: 18121
diff changeset
705 GList *p;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
706 GtkSizeGroup *sg;
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
707 int i;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
708 char buf[256];
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
709
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
710 if (show_all)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
711 list = purple_accounts_get_all();
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
712 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
713 list = purple_connections_get_all();
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
714
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
715 aop_menu = g_malloc0(sizeof(AopMenu));
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
716 aop_menu->default_item = -1;
17377
136e8a8b76da Forgot an instance of g_object_new and some other changes are necessary, too.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17375
diff changeset
717 aop_menu->menu = gtk_menu_new();
136e8a8b76da Forgot an instance of g_object_new and some other changes are necessary, too.
Gabriel Schulhof <nix@go-nix.ca>
parents: 17375
diff changeset
718 gtk_widget_show(aop_menu->menu);
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
719 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
720
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
721 for (p = list, i = 0; p != NULL; p = p->next, i++) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
722 PurplePlugin *plugin;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
723
5879
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
724 if (show_all)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
725 account = (PurpleAccount *)p->data;
5879
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
726 else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
727 PurpleConnection *gc = (PurpleConnection *)p->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
728
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
729 account = purple_connection_get_account(gc);
5879
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
730 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
731
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
732 if (filter_func && !filter_func(account)) {
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
733 i--;
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
734 continue;
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
735 }
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
736
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
737 plugin = purple_find_prpl(purple_account_get_protocol_id(account));
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
738
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
739 pixbuf = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_SMALL);
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
740
17386
f68ba6199d79 merge of 'de0c8e6287f1090343edb9c43e0d8d681e58df07'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17368 17385
diff changeset
741 if (pixbuf) {
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
742 if (purple_account_is_disconnected(account) && show_all &&
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
743 purple_connections_get_all())
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
744 gdk_pixbuf_saturate_and_pixelate(pixbuf, pixbuf, 0.0, FALSE);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
745 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
746
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
747 if (purple_account_get_alias(account)) {
11017
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
748 g_snprintf(buf, sizeof(buf), "%s (%s) (%s)",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
749 purple_account_get_username(account),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
750 purple_account_get_alias(account),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
751 purple_account_get_protocol_name(account));
11017
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
752 } else {
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
753 g_snprintf(buf, sizeof(buf), "%s (%s)",
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
754 purple_account_get_username(account),
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
755 purple_account_get_protocol_name(account));
11017
500eea0d6800 [gaim-migrate @ 12886]
Etan Reisner <deryni@pidgin.im>
parents: 10951
diff changeset
756 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
757
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
758 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
17851
02fbbecd95f5 Make sure if some plugin used pidgin_protocol_option_menu_new, they continue
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17387
diff changeset
759 aop_menu_item_new(sg, pixbuf, buf, account, "account"));
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
760
17235
f04fc9bbb90b Style changes in if statements.
Richard Laager <rlaager@pidgin.im>
parents: 17234
diff changeset
761 if (pixbuf)
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
762 g_object_unref(pixbuf);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
763
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
764 if (default_account && account == default_account)
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
765 aop_menu->default_item = i;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
766 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
767
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
768 g_object_unref(sg);
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
769
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
770 return aop_menu;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
771 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
772
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
773 static void
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
774 regenerate_account_menu(GtkWidget *optmenu)
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
775 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
776 gboolean show_all;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
777 PurpleAccount *account;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
778 PurpleFilterAccountFunc filter_func;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
779
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
780 account = (PurpleAccount *)aop_option_menu_get_selected(optmenu, NULL);
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
781 show_all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(optmenu), "show_all"));
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
782 filter_func = g_object_get_data(G_OBJECT(optmenu), "filter_func");
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
783
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
784 aop_option_menu_replace_menu(optmenu, create_account_menu(account, filter_func, show_all));
6391
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
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
787 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
788 account_menu_sign_on_off_cb(PurpleConnection *gc, GtkWidget *optmenu)
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
789 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
790 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
791 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
792
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
793 static void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
794 account_menu_added_removed_cb(PurpleAccount *account, GtkWidget *optmenu)
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
795 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
796 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
797 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
798
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
799 static gboolean
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
800 account_menu_destroyed_cb(GtkWidget *optmenu, GdkEvent *event,
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
801 void *user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
802 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
803 purple_signals_disconnect_by_handle(optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
804
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
805 return FALSE;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
806 }
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
807
9910
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
808 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
809 pidgin_account_option_menu_set_selected(GtkWidget *optmenu, PurpleAccount *account)
9910
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
810 {
17385
bf46968ab031 Casting things to gpointer isn't useful, unless they were previously const.
Richard Laager <rlaager@pidgin.im>
parents: 17377
diff changeset
811 aop_option_menu_select_by_data(optmenu, account);
9910
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
812 }
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
813
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
814 GtkWidget *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
815 pidgin_account_option_menu_new(PurpleAccount *default_account,
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
816 gboolean show_all, GCallback cb,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
817 PurpleFilterAccountFunc filter_func,
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
818 gpointer user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
819 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
820 GtkWidget *optmenu;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
821
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
822 /* Create the option menu */
17234
6e430db9b926 Style change: death to spaces before semi-colons.
Richard Laager <rlaager@pidgin.im>
parents: 17233
diff changeset
823 optmenu = aop_option_menu_new(create_account_menu(default_account, filter_func, show_all), cb, user_data);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
824
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
825 g_signal_connect(G_OBJECT(optmenu), "destroy",
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
826 G_CALLBACK(account_menu_destroyed_cb), NULL);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
827
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
828 /* Register the purple sign on/off event callbacks. */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
829 purple_signal_connect(purple_connections_get_handle(), "signed-on",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
830 optmenu, PURPLE_CALLBACK(account_menu_sign_on_off_cb),
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
831 optmenu);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
832 purple_signal_connect(purple_connections_get_handle(), "signed-off",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
833 optmenu, PURPLE_CALLBACK(account_menu_sign_on_off_cb),
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
834 optmenu);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
835 purple_signal_connect(purple_accounts_get_handle(), "account-added",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
836 optmenu, PURPLE_CALLBACK(account_menu_added_removed_cb),
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
837 optmenu);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
838 purple_signal_connect(purple_accounts_get_handle(), "account-removed",
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
839 optmenu, PURPLE_CALLBACK(account_menu_added_removed_cb),
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
840 optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
841
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
842 /* Set some data. */
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
843 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
844 g_object_set_data(G_OBJECT(optmenu), "show_all", GINT_TO_POINTER(show_all));
17375
0d9082502e58 Coding style changes
Gabriel Schulhof <nix@go-nix.ca>
parents: 17238
diff changeset
845 g_object_set_data(G_OBJECT(optmenu), "filter_func", filter_func);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
846
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
847 return optmenu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
848 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
849
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
850 gboolean
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
851 pidgin_check_if_dir(const char *path, GtkFileSelection *filesel)
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
852 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
853 char *dirname;
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
854
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
855 if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
856 /* append a / if needed */
9534
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
857 if (path[strlen(path) - 1] != G_DIR_SEPARATOR) {
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
858 dirname = g_strconcat(path, G_DIR_SEPARATOR_S, NULL);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
859 } else {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
860 dirname = g_strdup(path);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
861 }
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
862 gtk_file_selection_set_filename(filesel, dirname);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
863 g_free(dirname);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
864 return TRUE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
865 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
866
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
867 return FALSE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
868 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
869
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
870 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
871 pidgin_setup_gtkspell(GtkTextView *textview)
12061
ef756336217f [gaim-migrate @ 14356]
Mike Hearn <mike@theoretic.com>
parents: 11878
diff changeset
872 {
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
873 #ifdef USE_GTKSPELL
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
874 GError *error = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
875 char *locale = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
876
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
877 g_return_if_fail(textview != NULL);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
878 g_return_if_fail(GTK_IS_TEXT_VIEW(textview));
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
879
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
880 if (gtkspell_new_attach(textview, locale, &error) == NULL && error)
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
881 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
882 purple_debug_warning("gtkspell", "Failed to setup GtkSpell: %s\n",
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
883 error->message);
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
884 g_error_free(error);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
885 }
12067
11fb53722956 [gaim-migrate @ 14362]
Richard Laager <rlaager@pidgin.im>
parents: 12063
diff changeset
886 #endif /* USE_GTKSPELL */
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
887 }
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
888
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
889 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
890 pidgin_save_accels_cb(GtkAccelGroup *accel_group, guint arg1,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
891 GdkModifierType arg2, GClosure *arg3,
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
892 gpointer data)
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
893 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
894 purple_debug(PURPLE_DEBUG_MISC, "accels",
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
895 "accel changed, scheduling save.\n");
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
896
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
897 if (!accels_save_timer)
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
898 accels_save_timer = g_timeout_add(5000, pidgin_save_accels,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
899 NULL);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
900 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
901
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
902 gboolean
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
903 pidgin_save_accels(gpointer data)
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
904 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
905 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
906
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
907 filename = g_build_filename(purple_user_dir(), G_DIR_SEPARATOR_S,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
908 "accels", NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
909 purple_debug(PURPLE_DEBUG_MISC, "accels", "saving accels to %s\n", filename);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
910 gtk_accel_map_save(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
911 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
912
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
913 accels_save_timer = 0;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
914 return FALSE;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
915 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
916
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
917 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
918 pidgin_load_accels()
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
919 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
920 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
921
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
922 filename = g_build_filename(purple_user_dir(), G_DIR_SEPARATOR_S,
14781
3733727a022a [gaim-migrate @ 17473]
Etan Reisner <deryni@pidgin.im>
parents: 14720
diff changeset
923 "accels", NULL);
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
924 gtk_accel_map_load(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
925 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
926 }
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
927
18281
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
928 static void
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
929 show_retrieveing_info(PurpleConnection *conn, const char *name)
17387
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
930 {
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
931 PurpleNotifyUserInfo *info = purple_notify_user_info_new();
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
932 purple_notify_user_info_add_pair(info, _("Information"), _("Retrieving..."));
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
933 purple_notify_userinfo(conn, name, info, NULL, NULL);
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
934 purple_notify_user_info_destroy(info);
18281
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
935 }
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
936
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
937 void pidgin_retrieve_user_info(PurpleConnection *conn, const char *name)
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
938 {
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
939 show_retrieveing_info(conn, name);
17387
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
940 serv_get_info(conn, name);
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
941 }
db83104d06f2 Fix the last merge.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17386
diff changeset
942
18281
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
943 void pidgin_retrieve_user_info_in_chat(PurpleConnection *conn, const char *name, int chat)
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
944 {
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
945 char *who = NULL;
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
946 PurplePluginProtocolInfo *prpl_info = NULL;
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
947
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
948 if (chat < 0) {
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
949 pidgin_retrieve_user_info(conn, name);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
950 return;
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
951 }
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
952
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
953 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(conn->prpl);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
954 if (prpl_info == NULL || prpl_info->get_cb_info == NULL) {
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
955 pidgin_retrieve_user_info(conn, name);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
956 return;
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
957 }
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
958
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
959 if (prpl_info->get_cb_real_name)
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
960 who = prpl_info->get_cb_real_name(conn, chat, name);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
961 show_retrieveing_info(conn, who ? who : name);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
962 prpl_info->get_cb_info(conn, chat, name);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
963 g_free(who);
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
964 }
f7dd07e1e434 Show immediate feedback when getting information about someone in a chat.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18278
diff changeset
965
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
966 gboolean
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
967 pidgin_parse_x_im_contact(const char *msg, gboolean all_accounts,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
968 PurpleAccount **ret_account, char **ret_protocol,
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
969 char **ret_username, char **ret_alias)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
970 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
971 char *protocol = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
972 char *username = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
973 char *alias = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
974 char *str;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
975 char *c, *s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
976 gboolean valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
977
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
978 g_return_val_if_fail(msg != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
979 g_return_val_if_fail(ret_protocol != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
980 g_return_val_if_fail(ret_username != NULL, FALSE);
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 s = str = g_strdup(msg);
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 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
985 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
986 char *key, *value;
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 key = s;
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 /* Grab the key */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
991 while (*s != '\r' && *s != '\n' && *s != '\0' && *s != ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
992 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
993
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
994 if (*s == '\r') s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
995
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
996 if (*s == '\n')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
997 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
998 s++;
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 if (*s != '\0') *s++ = '\0';
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 /* Clear past any whitespace */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1005 while (*s != '\0' && *s == ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1006 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1007
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1008 /* Now let's grab until the end of the line. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1009 value = s;
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 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1012 s++;
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 (*s == '\r') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1015 if (*s == '\n') *s++ = '\0';
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 if ((c = strchr(key, ':')) != 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 if (!g_ascii_strcasecmp(key, "X-IM-Username:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1020 username = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1021 else if (!g_ascii_strcasecmp(key, "X-IM-Protocol:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1022 protocol = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1023 else if (!g_ascii_strcasecmp(key, "X-IM-Alias:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1024 alias = g_strdup(value);
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 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1027
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1028 if (username != NULL && protocol != NULL)
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 valid = TRUE;
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 *ret_username = username;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1033 *ret_protocol = protocol;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1034
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1035 if (ret_alias != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1036 *ret_alias = alias;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1037
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1038 /* Check for a compatible account. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1039 if (ret_account != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1040 {
18122
9bf9970c1b6a disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents: 18121
diff changeset
1041 GList *list;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1042 PurpleAccount *account = NULL;
18122
9bf9970c1b6a disapproval of revision '2d8ea56b90971e7851442d96b7d74ecb4f052126'
Richard Laager <rlaager@pidgin.im>
parents: 18121
diff changeset
1043 GList *l;
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1044 const char *protoname;
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 if (all_accounts)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1047 list = purple_accounts_get_all();
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1048 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1049 list = purple_connections_get_all();
7712
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 for (l = list; l != NULL; l = l->next)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1052 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1053 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1054 PurplePluginProtocolInfo *prpl_info = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1055 PurplePlugin *plugin;
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1056
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1057 if (all_accounts)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1058 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1059 account = (PurpleAccount *)l->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1060
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1061 plugin = purple_plugins_find_with_id(
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1062 purple_account_get_protocol_id(account));
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1063
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1064 if (plugin == NULL)
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 account = NULL;
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 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1069 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1070
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1071 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1072 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1073 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1074 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1075 gc = (PurpleConnection *)l->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1076 account = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1077
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1078 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1079 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1080
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1081 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1082
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1083 if (!strcmp(protoname, protocol))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1084 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1085
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1086 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1087 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1088
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1089 /* Special case for AIM and ICQ */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1090 if (account == NULL && (!strcmp(protocol, "aim") ||
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1091 !strcmp(protocol, "icq")))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1092 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1093 for (l = list; l != NULL; l = l->next)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1094 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1095 PurpleConnection *gc;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1096 PurplePluginProtocolInfo *prpl_info = NULL;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1097 PurplePlugin *plugin;
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1098
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1099 if (all_accounts)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1100 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1101 account = (PurpleAccount *)l->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1102
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1103 plugin = purple_plugins_find_with_id(
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1104 purple_account_get_protocol_id(account));
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1105
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1106 if (plugin == NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1107 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1108 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1109
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1110 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1111 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1112
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1113 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1114 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1115 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1116 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1117 gc = (PurpleConnection *)l->data;
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1118 account = purple_connection_get_account(gc);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1119
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1120 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1121 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1122
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1123 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1124
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1125 if (!strcmp(protoname, "aim") || !strcmp(protoname, "icq"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1126 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1127
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1128 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1129 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1130 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1131
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1132 *ret_account = account;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1133 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1134 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1135 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1136 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1137 valid = FALSE;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1138
14097
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1139 g_free(username);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1140 g_free(protocol);
0c340861ab79 [gaim-migrate @ 16638]
Mark Doliner <markdoliner@pidgin.im>
parents: 13783
diff changeset
1141 g_free(alias);
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1142 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1143
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1144 g_free(str);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1145
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1146 return valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1147 }
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1148
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1149 void
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
1150 pidgin_set_accessible_label (GtkWidget *w, GtkWidget *l)
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1151 {
19547
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1152 AtkObject *acc;
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1153 const gchar *label_text;
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1154 const gchar *existing_name;
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1155
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1156 acc = gtk_widget_get_accessible (w);
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1157
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1158 /* If this object has no name, set it's name with the label text */
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1159 existing_name = atk_object_get_name (acc);
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1160 if (!existing_name) {
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1161 label_text = gtk_label_get_text (GTK_LABEL(l));
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1162 if (label_text)
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1163 atk_object_set_name (acc, label_text);
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1164 }
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1165
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1166 pidgin_set_accessible_relations(w, l);
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1167 }
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1168
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1169 void
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1170 pidgin_set_accessible_relations (GtkWidget *w, GtkWidget *l)
0c3fcdc6a025 Separate out setting up the labelled-by and label-for ATK relationships
Casey Harkins <charkins@pidgin.im>
parents: 19123
diff changeset
1171 {
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1172 AtkObject *acc, *label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1173 AtkObject *rel_obj[1];
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1174 AtkRelationSet *set;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1175 AtkRelation *relation;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1176
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1177 acc = gtk_widget_get_accessible (w);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1178 label = gtk_widget_get_accessible (l);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1179
18351
b881759cda28 Call gtk_label_set_mnemonic_widget() in pidgin_make_accessible_label. Closes #589
Sean Egan <seanegan@pidgin.im>
parents: 18281
diff changeset
1180 /* Make sure mnemonics work */
b881759cda28 Call gtk_label_set_mnemonic_widget() in pidgin_make_accessible_label. Closes #589
Sean Egan <seanegan@pidgin.im>
parents: 18281
diff changeset
1181 gtk_label_set_mnemonic_widget(GTK_LABEL(l), w);
b881759cda28 Call gtk_label_set_mnemonic_widget() in pidgin_make_accessible_label. Closes #589
Sean Egan <seanegan@pidgin.im>
parents: 18281
diff changeset
1182
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1183 /* Create the labeled-by relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1184 set = atk_object_ref_relation_set (acc);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1185 rel_obj[0] = label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1186 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABELLED_BY);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1187 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1188 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1189
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1190 /* Create the label-for relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1191 set = atk_object_ref_relation_set (label);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1192 rel_obj[0] = acc;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1193 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABEL_FOR);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1194 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1195 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1196 }
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1197
18238
b38c33d2d71e Reduce code duplication and keep gtk 2.0 compatibility by making
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18216
diff changeset
1198 void
b38c33d2d71e Reduce code duplication and keep gtk 2.0 compatibility by making
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18216
diff changeset
1199 pidgin_menu_position_func_helper(GtkMenu *menu,
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1200 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1201 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1202 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1203 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1204 {
18238
b38c33d2d71e Reduce code duplication and keep gtk 2.0 compatibility by making
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18216
diff changeset
1205 #if GTK_CHECK_VERSION(2,2,0)
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1206 GtkWidget *widget;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1207 GtkRequisition requisition;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1208 GdkScreen *screen;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1209 GdkRectangle monitor;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1210 gint monitor_num;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1211 gint space_left, space_right, space_above, space_below;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1212 gint needed_width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1213 gint needed_height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1214 gint xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1215 gint ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1216 gboolean rtl;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1217
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1218 g_return_if_fail(GTK_IS_MENU(menu));
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1219
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1220 widget = GTK_WIDGET(menu);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1221 screen = gtk_widget_get_screen(widget);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1222 xthickness = widget->style->xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1223 ythickness = widget->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1224 rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1225
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 * We need the requisition to figure out the right place to
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1228 * 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
1229 * 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
1230 * the requisition won't have been recomputed yet.
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 gtk_widget_size_request (widget, &requisition);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1233
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1234 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
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 push_in = FALSE;
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1237
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1238 /*
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1239 * The placement of popup menus horizontally works like this (with
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1240 * RTL in parentheses)
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 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
1243 * position the menu there.
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1244 *
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1245 * - 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
1246 * mouse cursor, position the menu there.
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1247 *
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1248 * - Otherwise if the menu is smaller than the monitor, position it
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1249 * 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
1250 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1251 * - 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
1252 * monitor), position it as far left (right) as possible.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1253 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1254 * Positioning in the vertical direction is similar: first try below
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1255 * mouse cursor, then above.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1256 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1257 gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1258
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1259 space_left = *x - monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1260 space_right = monitor.x + monitor.width - *x - 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1261 space_above = *y - monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1262 space_below = monitor.y + monitor.height - *y - 1;
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 /* position horizontally */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1265
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1266 /* 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
1267 * menu is offset "xthickness" pixels
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1268 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1269 needed_width = requisition.width - xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1270
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1271 if (needed_width <= space_left ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1272 needed_width <= space_right)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1273 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1274 if ((rtl && needed_width <= space_left) ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1275 (!rtl && needed_width > space_right))
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1276 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1277 /* position left */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1278 *x = *x + xthickness - requisition.width + 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1279 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1280 else
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 /* position right */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1283 *x = *x - xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1284 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1285
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1286 /* x is clamped on-screen further down */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1287 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1288 else if (requisition.width <= monitor.width)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1289 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1290 /* 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
1291 * cursor, but smaller than the monitor. Position it on
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1292 * the side that has the most space
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1293 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1294 if (space_left > space_right)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1295 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1296 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1297 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1298 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1299 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1300 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1301 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1302 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1303 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1304 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1305 else /* menu is simply too big for the monitor */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1306 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1307 if (rtl)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1308 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1309 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1310 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1311 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1312 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1313 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1314 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1315 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1316 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1317 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1318
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1319 /* Position vertically. The algorithm is the same as above, but
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1320 * simpler because we don't have to take RTL into account.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1321 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1322 needed_height = requisition.height - ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1323
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1324 if (needed_height <= space_above ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1325 needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1326 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1327 if (needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1328 *y = *y - ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1329 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1330 *y = *y + ythickness - requisition.height + 1;
11525
1d06283bdcc9 [gaim-migrate @ 13773]
Francesco Fracassi <ffracassi@users.sourceforge.net>
parents: 11338
diff changeset
1331
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1332 *y = CLAMP (*y, monitor.y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1333 monitor.y + monitor.height - requisition.height);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1334 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1335 else if (needed_height > space_below && needed_height > space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1336 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1337 if (space_below >= space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1338 *y = monitor.y + monitor.height - requisition.height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1339 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1340 *y = monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1341 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1342 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1343 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1344 *y = monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1345 }
18238
b38c33d2d71e Reduce code duplication and keep gtk 2.0 compatibility by making
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18216
diff changeset
1346 #endif
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1347 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1348
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1349
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1350 void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1351 pidgin_treeview_popup_menu_position_func(GtkMenu *menu,
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1352 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1353 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1354 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1355 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1356 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1357 GtkWidget *widget = GTK_WIDGET(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1358 GtkTreeView *tv = GTK_TREE_VIEW(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1359 GtkTreePath *path;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1360 GtkTreeViewColumn *col;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1361 GdkRectangle rect;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1362 gint ythickness = GTK_WIDGET(menu)->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1363
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1364 gdk_window_get_origin (widget->window, x, y);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1365 gtk_tree_view_get_cursor (tv, &path, &col);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1366 gtk_tree_view_get_cell_area (tv, path, col, &rect);
8218
0ff223f56a67 [gaim-migrate @ 8941]
Christian Hammond <chipx86@chipx86.com>
parents: 8215
diff changeset
1367
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1368 *x += rect.x+rect.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1369 *y += rect.y+rect.height+ythickness;
18238
b38c33d2d71e Reduce code duplication and keep gtk 2.0 compatibility by making
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 18216
diff changeset
1370 pidgin_menu_position_func_helper(menu, x, y, push_in, data);
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1371 }
10061
2833056ea11c [gaim-migrate @ 11033]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9910
diff changeset
1372
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1373 enum {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1374 DND_FILE_TRANSFER,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1375 DND_IM_IMAGE,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1376 DND_BUDDY_ICON
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1377 };
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1378
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1379 typedef struct {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1380 char *filename;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1381 PurpleAccount *account;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1382 char *who;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1383 } _DndData;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1384
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
1385 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
1386 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1387 char *filedata;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1388 size_t size;
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1389 struct stat st;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1390 GError *err = NULL;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1391 PurpleConversation *conv;
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1392 PidginConversation *gtkconv;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1393 GtkTextIter iter;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1394 int id;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1395 switch (choice) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1396 case DND_BUDDY_ICON:
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1397 if (g_stat(data->filename, &st)) {
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1398 char *str;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1399
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
1400 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
1401 data->filename, strerror(errno));
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1402 purple_notify_error(NULL, NULL,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1403 _("Failed to load image"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1404 str);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1405 g_free(str);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1406
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1407 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1408 }
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1409
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1410 pidgin_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
1411 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1412 case DND_FILE_TRANSFER:
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1413 serv_send_file(purple_account_get_connection(data->account), data->who, data->filename);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1414 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1415 case DND_IM_IMAGE:
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1416 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, data->account, data->who);
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1417 gtkconv = PIDGIN_CONVERSATION(conv);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1418
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1419 if (!g_file_get_contents(data->filename, &filedata, &size,
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1420 &err)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1421 char *str;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1422
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1423 str = g_strdup_printf(_("The following error has occurred loading %s: %s"), data->filename, err->message);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1424 purple_notify_error(NULL, NULL,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1425 _("Failed to load image"),
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1426 str);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1427
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1428 g_error_free(err);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1429 g_free(str);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1430
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1431 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1432 }
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16314
diff changeset
1433 id = purple_imgstore_add_with_id(filedata, size, data->filename);
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 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
1436 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
1437 gtk_imhtml_insert_image_at_iter(GTK_IMHTML(gtkconv->entry), id, &iter);
16437
7ff7c3405ea2 Rework the buddy icon subsystem to use the imgstore subsystem, and modify the
Richard Laager <rlaager@pidgin.im>
parents: 16314
diff changeset
1438 purple_imgstore_unref_by_id(id);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1439
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1440 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1441 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1442 free(data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1443 free(data->who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1444 free(data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1445 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1446
10850
6889f793b918 [gaim-migrate @ 12522]
Mark Doliner <markdoliner@pidgin.im>
parents: 10681
diff changeset
1447 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
1448 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1449 free(data->filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1450 free(data->who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1451 free(data);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1452 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1453
11110
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1454 static void dnd_set_icon_ok_cb(_DndData *data)
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1455 {
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1456 dnd_image_ok_callback(data, DND_BUDDY_ICON);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1457 }
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1458
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1459 static void dnd_set_icon_cancel_cb(_DndData *data)
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1460 {
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1461 free(data->filename);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1462 free(data->who);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1463 free(data);
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1464 }
acc4e51cb91a [gaim-migrate @ 13162]
Richard Laager <rlaager@pidgin.im>
parents: 11017
diff changeset
1465
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1466 void
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1467 pidgin_dnd_file_manage(GtkSelectionData *sd, PurpleAccount *account, const char *who)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1468 {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1469 GList *tmp;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1470 GdkPixbuf *pb;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1471 GList *files = purple_uri_list_extract_filenames((const gchar *)sd->data);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1472 PurpleConnection *gc = purple_account_get_connection(account);
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1473 PurplePluginProtocolInfo *prpl_info = NULL;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1474 gboolean file_send_ok = FALSE;
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1475 #ifndef _WIN32
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1476 PurpleDesktopItem *item;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1477 #endif
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1478
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1479 g_return_if_fail(account != NULL);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1480 g_return_if_fail(who != 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 for(tmp = files; tmp != NULL ; tmp = g_list_next(tmp)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1483 gchar *filename = tmp->data;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1484 gchar *basename = g_path_get_basename(filename);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1485
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1486 /* Set the default action: don't send anything */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1487 file_send_ok = FALSE;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1488
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1489 /* 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
1490 if (!g_file_test(filename, G_FILE_TEST_EXISTS)) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1491 continue;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1492 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1493
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1494 /* XXX - make ft api suupport sending a directory */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1495 /* Are we dealing with a directory? */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1496 if (g_file_test(filename, G_FILE_TEST_IS_DIR)) {
16071
044392e01c96 make things cleaner for translators
Nathan Walp <nwalp@pidgin.im>
parents: 15987
diff changeset
1497 char *str, *str2;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1498
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1499 str = g_strdup_printf(_("Cannot send folder %s."), basename);
16977
c9cb49bea66d Change the PIDGIN_NAME stuff to allow translators to transliterate the
Richard Laager <rlaager@pidgin.im>
parents: 16692
diff changeset
1500 str2 = g_strdup_printf(_("%s cannot transfer a folder. You will need to send the files within individually."), PIDGIN_NAME);
16071
044392e01c96 make things cleaner for translators
Nathan Walp <nwalp@pidgin.im>
parents: 15987
diff changeset
1501
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1502 purple_notify_error(NULL, NULL,
16071
044392e01c96 make things cleaner for translators
Nathan Walp <nwalp@pidgin.im>
parents: 15987
diff changeset
1503 str, str2);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1504
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1505 g_free(str);
16071
044392e01c96 make things cleaner for translators
Nathan Walp <nwalp@pidgin.im>
parents: 15987
diff changeset
1506 g_free(str2);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1507
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1508 continue;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1509 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1510
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1511 /* Are we dealing with an image? */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1512 pb = gdk_pixbuf_new_from_file(filename, NULL);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1513 if (pb) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1514 _DndData *data = g_malloc(sizeof(_DndData));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1515 gboolean ft = FALSE, im = FALSE;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1516
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1517 data->who = g_strdup(who);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1518 data->filename = g_strdup(filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1519 data->account = account;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1520
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1521 if (gc)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1522 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl);
10348
0ab5eb1a828e [gaim-migrate @ 11562]
Mark Doliner <markdoliner@pidgin.im>
parents: 10335
diff changeset
1523
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1524 if (prpl_info && prpl_info->options & OPT_PROTO_IM_IMAGE)
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1525 im = TRUE;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1526
10348
0ab5eb1a828e [gaim-migrate @ 11562]
Mark Doliner <markdoliner@pidgin.im>
parents: 10335
diff changeset
1527 if (prpl_info && prpl_info->can_receive_file)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1528 ft = prpl_info->can_receive_file(gc, who);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1529
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1530 if (im && ft)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1531 purple_request_choice(NULL, NULL,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1532 _("You have dragged an image"),
10951
a81bececc6f0 [gaim-migrate @ 12751]
Richard Laager <rlaager@pidgin.im>
parents: 10871
diff changeset
1533 _("You can send this image as a file transfer, "
a81bececc6f0 [gaim-migrate @ 12751]
Richard Laager <rlaager@pidgin.im>
parents: 10871
diff changeset
1534 "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
1535 DND_FILE_TRANSFER, "OK", (GCallback)dnd_image_ok_callback,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1536 "Cancel", (GCallback)dnd_image_cancel_callback,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1537 account, who, NULL,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1538 data,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1539 _("Set as buddy icon"), DND_BUDDY_ICON,
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1540 _("Send image file"), DND_FILE_TRANSFER,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1541 _("Insert in message"), DND_IM_IMAGE,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1542 NULL);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1543 else if (!(im || ft))
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1544 purple_request_yes_no(NULL, NULL, _("You have dragged an image"),
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1545 _("Would you like to set it as the buddy icon for this user?"),
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1546 0,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1547 account, who, NULL,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1548 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
1549 else
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1550 purple_request_choice(NULL, NULL,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1551 _("You have dragged an image"),
17497
6cbc2e55e878 Fix the "transfer file or embed image" message (it looks like it was copied and pasted incorrectly).
Daniel Atallah <datallah@pidgin.im>
parents: 17487
diff changeset
1552 (ft ? _("You can send this image as a file transfer, or use it as the buddy icon for this user.") :
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1553 _("You can insert this image into this message, or use it as the buddy icon for this user")),
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1554 (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE),
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1555 "OK", (GCallback)dnd_image_ok_callback,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1556 "Cancel", (GCallback)dnd_image_cancel_callback,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1557 account, who, NULL,
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1558 data,
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1559 _("Set as buddy icon"), DND_BUDDY_ICON,
16490
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1560 (ft ? _("Send image file") : _("Insert in message")), (ft ? DND_FILE_TRANSFER : DND_IM_IMAGE),
68c22924d66b Added account, who, and conversation parameters to the request API calls, and updated all code to match. I can't compile the Perl module, so I'd appreciate it if someone who knows it would verify that this doesn't break Perl.
Evan Schoenberg <evands@pidgin.im>
parents: 16314
diff changeset
1561 NULL);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1562 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1563 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1564
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1565 #ifndef _WIN32
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1566 /* Are we trying to send a .desktop file? */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1567 else if (purple_str_has_suffix(basename, ".desktop") && (item = purple_desktop_item_new_from_file(filename))) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1568 PurpleDesktopItemType dtype;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1569 char key[64];
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1570 const char *itemname = NULL;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1571
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1572 #if GTK_CHECK_VERSION(2,6,0)
10679
3b71abc53c06 [gaim-migrate @ 12225]
Nathan Walp <nwalp@pidgin.im>
parents: 10590
diff changeset
1573 const char * const *langs;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1574 int i;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1575 langs = g_get_language_names();
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1576 for (i = 0; langs[i]; i++) {
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1577 g_snprintf(key, sizeof(key), "Name[%s]", langs[i]);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1578 itemname = purple_desktop_item_get_string(item, key);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1579 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1580 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1581 #else
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1582 const char *lang = g_getenv("LANG");
10681
7c56ed5f169f [gaim-migrate @ 12227]
Richard Laager <rlaager@pidgin.im>
parents: 10679
diff changeset
1583 char *dot;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1584 dot = strchr(lang, '.');
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1585 if (dot)
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1586 *dot = '\0';
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1587 g_snprintf(key, sizeof(key), "Name[%s]", lang);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1588 itemname = purple_desktop_item_get_string(item, key);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1589 #endif
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1590 if (!itemname)
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1591 itemname = purple_desktop_item_get_string(item, "Name");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1592
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1593 dtype = purple_desktop_item_get_entry_type(item);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1594 switch (dtype) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1595 PurpleConversation *conv;
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1596 PidginConversation *gtkconv;
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1597
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1598 case PURPLE_DESKTOP_ITEM_TYPE_LINK:
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1599 conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, who);
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1600 gtkconv = PIDGIN_CONVERSATION(conv);
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1601 gtk_imhtml_insert_link(GTK_IMHTML(gtkconv->entry),
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1602 gtk_text_buffer_get_insert(GTK_IMHTML(gtkconv->entry)->text_buffer),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1603 purple_desktop_item_get_string(item, "URL"), itemname);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1604 break;
10335
cf53f16ad85d [gaim-migrate @ 11542]
Kevin Stange <kstange@pidgin.im>
parents: 10240
diff changeset
1605 default:
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1606 /* 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
1607 * "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
1608 * 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
1609 * Probably not. I'll just give an error and return. */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1610 /* The original patch sent the icon used by the launcher. That's probably wrong */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1611 purple_notify_error(NULL, NULL, _("Cannot send launcher"), _("You dragged a desktop launcher. "
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1612 "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
1613 " itself."));
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1614 break;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1615 }
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1616 purple_desktop_item_unref(item);
10229
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1617 return;
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1618 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1619 #endif /* _WIN32 */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1620
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1621 /* Everything is fine, let's send */
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1622 serv_send_file(gc, who, filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1623 g_free(filename);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1624 }
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1625 g_list_free(files);
39ffee70c286 [gaim-migrate @ 11364]
Alceste Scalas <alceste.scalas@gmx.net>
parents: 10209
diff changeset
1626 }
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1627
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1628 void pidgin_buddy_icon_get_scale_size(GdkPixbuf *buf, PurpleBuddyIconSpec *spec, PurpleIconScaleRules rules, int *width, int *height)
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1629 {
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1630 *width = gdk_pixbuf_get_width(buf);
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1631 *height = gdk_pixbuf_get_height(buf);
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1632
15301
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1633 if ((spec == NULL) || !(spec->scale_rules & rules))
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1634 return;
26153c5f156a [gaim-migrate @ 18029]
Mark Doliner <markdoliner@pidgin.im>
parents: 15289
diff changeset
1635
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1636 purple_buddy_icon_get_scale_size(spec, width, height);
10483
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1637
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1638 /* and now for some arbitrary sanity checks */
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1639 if(*width > 100)
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1640 *width = 100;
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1641 if(*height > 100)
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1642 *height = 100;
e7b09a8b1f52 [gaim-migrate @ 11773]
Nathan Walp <nwalp@pidgin.im>
parents: 10348
diff changeset
1643 }
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1644
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1645 GdkPixbuf * pidgin_create_status_icon(PurpleStatusPrimitive prim, GtkWidget *w, const char *size)
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1646 {
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1647 GtkIconSize icon_size = gtk_icon_size_from_name(size);
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1648 GdkPixbuf *pixbuf = NULL;
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1649
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1650 if (prim == PURPLE_STATUS_UNAVAILABLE)
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1651 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_BUSY,
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1652 icon_size, "GtkWidget");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1653 else if (prim == PURPLE_STATUS_AWAY)
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1654 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_AWAY,
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1655 icon_size, "GtkWidget");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1656 else if (prim == PURPLE_STATUS_EXTENDED_AWAY)
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1657 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_XA,
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1658 icon_size, "GtkWidget");
16314
8d241092821c use the invisible icon
Richard Nelson <wabz@pidgin.im>
parents: 16263
diff changeset
1659 else if (prim == PURPLE_STATUS_INVISIBLE)
8d241092821c use the invisible icon
Richard Nelson <wabz@pidgin.im>
parents: 16263
diff changeset
1660 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_INVISIBLE,
8d241092821c use the invisible icon
Richard Nelson <wabz@pidgin.im>
parents: 16263
diff changeset
1661 icon_size, "GtkWidget");
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1662 else if (prim == PURPLE_STATUS_OFFLINE)
15799
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1663 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_OFFLINE,
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1664 icon_size, "GtkWidget");
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1665 else
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1666 pixbuf = gtk_widget_render_icon (w, PIDGIN_STOCK_STATUS_AVAILABLE,
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1667 icon_size, "GtkWidget");
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1668 return pixbuf;
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1669
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1670 }
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1671
ba7af742a0d1 Change some old, busted status icon stuff to use the new hotness
Sean Egan <seanegan@pidgin.im>
parents: 15645
diff changeset
1672
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1673 GdkPixbuf *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1674 pidgin_create_prpl_icon(PurpleAccount *account, PidginPrplIconSize size)
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1675 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1676 PurplePlugin *prpl;
12080
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1677
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1678 g_return_val_if_fail(account != NULL, NULL);
2aaca2265a51 [gaim-migrate @ 14377]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 12067
diff changeset
1679
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1680 prpl = purple_find_prpl(purple_account_get_protocol_id(account));
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1681 if (prpl == NULL)
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1682 return NULL;
17368
e2c6cb39043c Remove code duplication for prpl-icon creation.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17363
diff changeset
1683 return pidgin_create_prpl_icon_from_prpl(prpl, size, account);
13091
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1684 }
b5ed878998dd [gaim-migrate @ 15452]
Mark Doliner <markdoliner@pidgin.im>
parents: 13081
diff changeset
1685
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1686 static void
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1687 menu_action_cb(GtkMenuItem *item, gpointer object)
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 gpointer data;
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1690 void (*callback)(gpointer, gpointer);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1691
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1692 callback = g_object_get_data(G_OBJECT(item), "purplecallback");
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1693 data = g_object_get_data(G_OBJECT(item), "purplecallbackdata");
12919
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 if (callback)
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1696 callback(object, data);
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1697 }
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1698
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1699 GtkWidget *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1700 pidgin_append_menu_action(GtkWidget *menu, PurpleMenuAction *act,
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1701 gpointer object)
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1702 {
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1703 GtkWidget *menuitem;
17386
f68ba6199d79 merge of 'de0c8e6287f1090343edb9c43e0d8d681e58df07'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17368 17385
diff changeset
1704
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1705 if (act == NULL) {
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1706 return pidgin_separator(menu);
17386
f68ba6199d79 merge of 'de0c8e6287f1090343edb9c43e0d8d681e58df07'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17368 17385
diff changeset
1707 }
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1708
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1709 if (act->children == NULL) {
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1710 menuitem = gtk_menu_item_new_with_mnemonic(act->label);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1711
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1712 if (act->callback != NULL) {
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1713 g_object_set_data(G_OBJECT(menuitem),
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1714 "purplecallback",
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1715 act->callback);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1716 g_object_set_data(G_OBJECT(menuitem),
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1717 "purplecallbackdata",
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1718 act->data);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1719 g_signal_connect(G_OBJECT(menuitem), "activate",
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1720 G_CALLBACK(menu_action_cb),
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1721 object);
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1722 } else {
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1723 gtk_widget_set_sensitive(menuitem, FALSE);
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1724 }
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1725
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1726 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1727 } else {
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1728 GList *l = NULL;
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1729 GtkWidget *submenu = NULL;
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1730 GtkAccelGroup *group;
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1731
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1732 menuitem = gtk_menu_item_new_with_mnemonic(act->label);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1733 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1734
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1735 submenu = gtk_menu_new();
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1736 gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), submenu);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1737
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1738 group = gtk_menu_get_accel_group(GTK_MENU(menu));
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1739 if (group) {
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1740 char *path = g_strdup_printf("%s/%s", GTK_MENU_ITEM(menuitem)->accel_path, act->label);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1741 gtk_menu_set_accel_path(GTK_MENU(submenu), path);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1742 g_free(path);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1743 gtk_menu_set_accel_group(GTK_MENU(submenu), group);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1744 }
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1745
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1746 for (l = act->children; l; l = l->next) {
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1747 PurpleMenuAction *act = (PurpleMenuAction *)l->data;
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1748
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1749 pidgin_append_menu_action(submenu, act, object);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1750 }
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1751 g_list_free(act->children);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1752 act->children = NULL;
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1753 }
17363
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1754 purple_menu_action_free(act);
f16ea1b259e2 Use purple_conversation_extended_menu to add items in the conversation
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 17360
diff changeset
1755 return menuitem;
12919
519199cca273 [gaim-migrate @ 15272]
Etan Reisner <deryni@pidgin.im>
parents: 12905
diff changeset
1756 }
13361
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 #if GTK_CHECK_VERSION(2,3,0)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1759 # define NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1760 #endif
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1761
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1762 typedef struct
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1763 {
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1764 GtkWidget *entry;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1765 GtkWidget *accountopt;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1766
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1767 PidginFilterBuddyCompletionEntryFunc filter_func;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1768 gpointer filter_func_user_data;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1769
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1770 #ifdef NEW_STYLE_COMPLETION
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1771 GtkListStore *store;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1772 #else
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1773 GCompletion *completion;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1774 gboolean completion_started;
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1775 GList *log_items;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1776 #endif /* NEW_STYLE_COMPLETION */
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1777 } PidginCompletionData;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1778
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1779 #ifndef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1780 static gboolean
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1781 completion_entry_event(GtkEditable *entry, GdkEventKey *event,
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1782 PidginCompletionData *data)
13361
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 int pos, end_pos;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1785
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1786 if (event->type == GDK_KEY_PRESS && event->keyval == GDK_Tab)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1787 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1788 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
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 if (data->completion_started &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1791 pos != end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1792 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
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_select_region(entry, 0, 0);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1795 gtk_editable_set_position(entry, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1796
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1797 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1798 }
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 else if (event->type == GDK_KEY_PRESS && event->length > 0)
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 char *prefix, *nprefix;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1803
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1804 gtk_editable_get_selection_bounds(entry, &pos, &end_pos);
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 if (data->completion_started &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1807 pos != end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1808 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1809 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1810 char *temp;
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 temp = gtk_editable_get_chars(entry, 0, pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1813 prefix = g_strconcat(temp, event->string, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1814 g_free(temp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1815 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1816 else if (pos == end_pos && pos > 1 &&
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1817 end_pos == strlen(gtk_entry_get_text(GTK_ENTRY(entry))))
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1818 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1819 prefix = g_strconcat(gtk_entry_get_text(GTK_ENTRY(entry)),
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1820 event->string, 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 else
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1823 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1824
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1825 pos = strlen(prefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1826 nprefix = NULL;
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_completion_complete(data->completion, prefix, &nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1829
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1830 if (nprefix != NULL)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1831 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1832 gtk_entry_set_text(GTK_ENTRY(entry), nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1833 gtk_editable_set_position(entry, pos);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1834 gtk_editable_select_region(entry, pos, -1);
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 data->completion_started = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1837
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1838 g_free(nprefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1839 g_free(prefix);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1840
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1841 return TRUE;
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
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1844 g_free(prefix);
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
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1847 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1848 }
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 static void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
1851 destroy_completion_data(GtkWidget *w, PidginCompletionData *data)
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1852 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1853 g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1854 g_completion_free(data->completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1855
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1856 g_free(data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1857 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1858 #endif /* !NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1859
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1860 #ifdef NEW_STYLE_COMPLETION
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1861 static gboolean screenname_completion_match_func(GtkEntryCompletion *completion,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1862 const gchar *key, GtkTreeIter *iter, gpointer user_data)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1863 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1864 GtkTreeModel *model;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1865 GValue val1;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1866 GValue val2;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1867 const char *tmp;
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 model = gtk_entry_completion_get_model (completion);
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 val1.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, 2, &val1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1873 tmp = g_value_get_string(&val1);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1874 if (tmp != NULL && purple_str_has_prefix(tmp, key))
13361
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(&val1);
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(&val1);
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 val2.g_type = 0;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1882 gtk_tree_model_get_value(model, iter, 3, &val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1883 tmp = g_value_get_string(&val2);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1884 if (tmp != NULL && purple_str_has_prefix(tmp, key))
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1885 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1886 g_value_unset(&val2);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1887 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1888 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1889 g_value_unset(&val2);
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 return FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1892 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1893
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1894 static gboolean screenname_completion_match_selected_cb(GtkEntryCompletion *completion,
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1895 GtkTreeModel *model, GtkTreeIter *iter, PidginCompletionData *data)
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1896 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1897 GValue val;
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1898 GtkWidget *optmenu = data->accountopt;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1899 PurpleAccount *account;
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1900
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1901 val.g_type = 0;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1902 gtk_tree_model_get_value(model, iter, 1, &val);
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1903 gtk_entry_set_text(GTK_ENTRY(data->entry), g_value_get_string(&val));
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1904 g_value_unset(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1905
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1906 gtk_tree_model_get_value(model, iter, 4, &val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1907 account = g_value_get_pointer(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1908 g_value_unset(&val);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1909
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1910 if (account == NULL)
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1911 return TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1912
17117
d256023d5312 aop_menu branch
Gabriel Schulhof <nix@go-nix.ca>
parents: 17116
diff changeset
1913 if (optmenu != NULL)
17385
bf46968ab031 Casting things to gpointer isn't useful, unless they were previously const.
Richard Laager <rlaager@pidgin.im>
parents: 17377
diff changeset
1914 aop_option_menu_select_by_data(optmenu, account);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1915
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1916 return TRUE;
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 static void
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1920 add_screenname_autocomplete_entry(GtkListStore *store, const char *buddy_alias, const char *contact_alias,
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
1921 const PurpleAccount *account, const char *screenname)
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1922 {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1923 GtkTreeIter iter;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1924 gboolean completion_added = FALSE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1925 gchar *normalized_screenname;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1926 gchar *tmp;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1927
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1928 tmp = g_utf8_normalize(screenname, -1, G_NORMALIZE_DEFAULT);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1929 normalized_screenname = g_utf8_casefold(tmp, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1930 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1931
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1932 /* There's no sense listing things like: 'xxx "xxx"'
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1933 when the screenname and buddy alias match. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1934 if (buddy_alias && strcmp(buddy_alias, screenname)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1935 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
1936 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
1937
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1938 tmp = g_utf8_casefold(tmp2, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1939 g_free(tmp2);
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 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1942 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1943 0, completion_entry,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1944 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1945 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1946 3, tmp,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1947 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1948 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1949 g_free(completion_entry);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1950 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1951 completion_added = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1952 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1953
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1954 /* There's no sense listing things like: 'xxx "xxx"'
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1955 when the screenname and contact alias match. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1956 if (contact_alias && strcmp(contact_alias, screenname)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1957 /* 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
1958 if (!buddy_alias || strcmp(contact_alias, buddy_alias)) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1959 char *completion_entry = g_strdup_printf("%s \"%s\"",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1960 screenname, contact_alias);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1961 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
1962
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1963 tmp = g_utf8_casefold(tmp2, -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1964 g_free(tmp2);
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 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1967 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1968 0, completion_entry,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1969 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1970 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1971 3, tmp,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1972 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1973 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1974 g_free(completion_entry);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1975 g_free(tmp);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1976 completion_added = TRUE;
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1977 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1978 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1979
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1980 if (completion_added == FALSE) {
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1981 /* Add the buddy's screenname. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1982 gtk_list_store_append(store, &iter);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1983 gtk_list_store_set(store, &iter,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1984 0, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1985 1, screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1986 2, normalized_screenname,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1987 3, NULL,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1988 4, account,
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1989 -1);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1990 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1991
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1992 g_free(normalized_screenname);
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 #endif /* NEW_STYLE_COMPLETION */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1995
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1996 static void get_log_set_name(PurpleLogSet *set, gpointer value, PidginCompletionData *data)
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
1997 {
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1998 PidginFilterBuddyCompletionEntryFunc filter_func = data->filter_func;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
1999 gpointer user_data = data->filter_func_user_data;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2000
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2001 /* 1. Don't show buddies because we will have gotten them already.
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2002 * 2. The boxes that use this autocomplete code handle only IMs. */
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2003 if (!set->buddy && set->type == PURPLE_LOG_IM) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2004 PidginBuddyCompletionEntry entry;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2005 entry.is_buddy = FALSE;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2006 entry.entry.logged_buddy = set;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2007
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2008 if (filter_func(&entry, user_data)) {
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2009 #ifdef NEW_STYLE_COMPLETION
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2010 add_screenname_autocomplete_entry(data->store,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2011 NULL, NULL, set->account, set->name);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2012 #else
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2013 /* Steal the name for the GCompletion. */
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2014 data->log_items = g_list_append(data->log_items, set->name);
13361
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 */
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2017 }
13361
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 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2020
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2021 static void
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2022 add_completion_list(PidginCompletionData *data)
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2023 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2024 PurpleBlistNode *gnode, *cnode, *bnode;
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2025 PidginFilterBuddyCompletionEntryFunc filter_func = data->filter_func;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2026 gpointer user_data = data->filter_func_user_data;
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2027 GHashTable *sets;
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2028
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2029 #ifdef NEW_STYLE_COMPLETION
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2030 gtk_list_store_clear(data->store);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2031 #else
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2032 GList *item = g_list_append(NULL, NULL);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2033
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2034 g_list_foreach(data->completion->items, (GFunc)g_free, NULL);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2035 g_completion_clear_items(data->completion);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2036 #endif /* NEW_STYLE_COMPLETION */
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2037
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2038 for (gnode = purple_get_blist()->root; gnode != NULL; gnode = gnode->next)
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2039 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2040 if (!PURPLE_BLIST_NODE_IS_GROUP(gnode))
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2041 continue;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2042
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2043 for (cnode = gnode->child; cnode != NULL; cnode = cnode->next)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2044 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2045 if (!PURPLE_BLIST_NODE_IS_CONTACT(cnode))
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2046 continue;
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2047
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2048 for (bnode = cnode->child; bnode != NULL; bnode = bnode->next)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2049 {
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2050 PidginBuddyCompletionEntry entry;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2051 entry.is_buddy = TRUE;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2052 entry.entry.buddy = (PurpleBuddy *) bnode;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2053
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2054 if (filter_func(&entry, user_data)) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2055 #ifdef NEW_STYLE_COMPLETION
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2056 add_screenname_autocomplete_entry(data->store,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2057 ((PurpleContact *)cnode)->alias,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2058 purple_buddy_get_contact_alias(entry.entry.buddy),
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2059 entry.entry.buddy->account,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2060 entry.entry.buddy->name
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2061 );
19123
baad98c70da0 Patch from Gabriel Schulhof to compile with old versions of glib.
Mark Doliner <markdoliner@pidgin.im>
parents: 18966
diff changeset
2062 #else
baad98c70da0 Patch from Gabriel Schulhof to compile with old versions of glib.
Mark Doliner <markdoliner@pidgin.im>
parents: 18966
diff changeset
2063 item->data = g_strdup(entry.entry.buddy->name);
baad98c70da0 Patch from Gabriel Schulhof to compile with old versions of glib.
Mark Doliner <markdoliner@pidgin.im>
parents: 18966
diff changeset
2064 g_completion_add_items(data->completion, item);
baad98c70da0 Patch from Gabriel Schulhof to compile with old versions of glib.
Mark Doliner <markdoliner@pidgin.im>
parents: 18966
diff changeset
2065 #endif /* NEW_STYLE_COMPLETION */
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2066 }
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2067 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2068 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2069 }
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2070
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2071 #ifndef NEW_STYLE_COMPLETION
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2072 g_list_free(item);
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2073 data->log_items = NULL;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2074 #endif /* NEW_STYLE_COMPLETION */
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2075
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2076 sets = purple_log_get_log_sets();
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2077 g_hash_table_foreach(sets, (GHFunc)get_log_set_name, data);
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2078 g_hash_table_destroy(sets);
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2079
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2080 #ifndef NEW_STYLE_COMPLETION
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2081 g_completion_add_items(data->completion, data->log_items);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2082 g_list_free(data->log_items);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2083 #endif /* NEW_STYLE_COMPLETION */
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2084 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2085
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2086 static void
13367
c05a832cf9cb [gaim-migrate @ 15739]
Richard Laager <rlaager@pidgin.im>
parents: 13366
diff changeset
2087 screenname_autocomplete_destroyed_cb(GtkWidget *widget, gpointer data)
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2088 {
17707
b5f042209c68 Unleak a few bytes in the screenname completion code
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17605
diff changeset
2089 g_free(data);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2090 purple_signals_disconnect_by_handle(widget);
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2091 }
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2092
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2093 static void
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2094 repopulate_autocomplete(gpointer something, gpointer data)
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2095 {
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2096 add_completion_list(data);
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
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2099
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2100 void
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2101 pidgin_setup_screenname_autocomplete_with_filter(GtkWidget *entry, GtkWidget *accountopt, PidginFilterBuddyCompletionEntryFunc filter_func, gpointer user_data)
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2102 {
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2103 PidginCompletionData *data;
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2104
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2105 #ifdef NEW_STYLE_COMPLETION
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2106 /* 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
2107 * the UTF-8 normalized & casefolded value for comparison, and the account. */
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2108 GtkListStore *store;
13365
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 GtkEntryCompletion *completion;
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2111
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2112 data = g_new0(PidginCompletionData, 1);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2113 store = gtk_list_store_new(5, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2114
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2115 data->entry = entry;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2116 data->accountopt = accountopt;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2117 if (filter_func == NULL) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2118 data->filter_func = pidgin_screenname_autocomplete_default_filter;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2119 data->filter_func_user_data = NULL;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2120 } else {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2121 data->filter_func = filter_func;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2122 data->filter_func_user_data = user_data;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2123 }
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2124 data->store = store;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2125
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2126 add_completion_list(data);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2127
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2128 /* Sort the completion list by screenname. */
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2129 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
2130 1, GTK_SORT_ASCENDING);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2131
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2132 completion = gtk_entry_completion_new();
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2133 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
2134
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2135 g_signal_connect(G_OBJECT(completion), "match-selected",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2136 G_CALLBACK(screenname_completion_match_selected_cb), data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2137
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2138 gtk_entry_set_completion(GTK_ENTRY(entry), completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2139 g_object_unref(completion);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2140
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2141 gtk_entry_completion_set_model(completion, GTK_TREE_MODEL(store));
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2142 g_object_unref(store);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2143
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2144 gtk_entry_completion_set_text_column(completion, 0);
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 #else /* !NEW_STYLE_COMPLETION */
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2147
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2148 data = g_new0(PidginCompletionData, 1);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2149
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2150 data->entry = entry;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2151 data->accountopt = accountopt;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2152 if (filter_func == NULL) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2153 data->filter_func = pidgin_screenname_autocomplete_default_filter;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2154 data->filter_func_user_data = NULL;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2155 } else {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2156 data->filter_func = filter_func;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2157 data->filter_func_user_data = user_data;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2158 }
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2159 data->completion = g_completion_new(NULL);
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2160 data->completion_started = FALSE;
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2161
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2162 add_completion_list(data);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2163
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2164 g_completion_set_compare(data->completion, g_ascii_strncasecmp);
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 g_signal_connect(G_OBJECT(entry), "event",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2167 G_CALLBACK(completion_entry_event), data);
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2168 g_signal_connect(G_OBJECT(entry), "destroy",
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2169 G_CALLBACK(destroy_completion_data), data);
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 #endif /* !NEW_STYLE_COMPLETION */
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2172
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2173 purple_signal_connect(purple_connections_get_handle(), "signed-on", entry,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2174 PURPLE_CALLBACK(repopulate_autocomplete), data);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2175 purple_signal_connect(purple_connections_get_handle(), "signed-off", entry,
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2176 PURPLE_CALLBACK(repopulate_autocomplete), data);
13366
e01cf252b407 [gaim-migrate @ 15738]
Richard Laager <rlaager@pidgin.im>
parents: 13365
diff changeset
2177
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2178 purple_signal_connect(purple_accounts_get_handle(), "account-added", entry,
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2179 PURPLE_CALLBACK(repopulate_autocomplete), data);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2180 purple_signal_connect(purple_accounts_get_handle(), "account-removed", entry,
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2181 PURPLE_CALLBACK(repopulate_autocomplete), data);
13365
8e6ae65497ef [gaim-migrate @ 15737]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13361
diff changeset
2182
17707
b5f042209c68 Unleak a few bytes in the screenname completion code
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17605
diff changeset
2183 g_signal_connect(G_OBJECT(entry), "destroy", G_CALLBACK(screenname_autocomplete_destroyed_cb), data);
13361
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2184 }
bb2f64cf6721 [gaim-migrate @ 15733]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 13281
diff changeset
2185
18966
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2186 gboolean
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2187 pidgin_screenname_autocomplete_default_filter(const PidginBuddyCompletionEntry *completion_entry, gpointer all_accounts) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2188 gboolean all = GPOINTER_TO_INT(all_accounts);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2189
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2190 if (completion_entry->is_buddy) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2191 return all || purple_account_is_connected(completion_entry->entry.buddy->account);
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2192 } else {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2193 return all || (completion_entry->entry.logged_buddy->account != NULL && purple_account_is_connected(completion_entry->entry.logged_buddy->account));
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2194 }
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2195 }
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2196
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2197 void
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2198 pidgin_setup_screenname_autocomplete(GtkWidget *entry, GtkWidget *accountopt, gboolean all) {
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2199 pidgin_setup_screenname_autocomplete_with_filter(entry, accountopt, pidgin_screenname_autocomplete_default_filter, GINT_TO_POINTER(all));
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2200 }
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2201
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2202
6a0715b72b6b Screenname auto-completion filtering by Leonardo Fernandes, Fixes #519
Sean Egan <seanegan@pidgin.im>
parents: 18941
diff changeset
2203
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2204 void pidgin_set_cursor(GtkWidget *widget, GdkCursorType cursor_type)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2205 {
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2206 GdkCursor *cursor;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2207
13470
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2208 g_return_if_fail(widget != NULL);
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2209 if (widget->window == NULL)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2210 return;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2211
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2212 cursor = gdk_cursor_new(GDK_WATCH);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2213 gdk_window_set_cursor(widget->window, cursor);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2214 gdk_cursor_unref(cursor);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2215
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2216 #if GTK_CHECK_VERSION(2,4,0)
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2217 gdk_display_flush(gdk_drawable_get_display(GDK_DRAWABLE(widget->window)));
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2218 #else
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2219 gdk_flush();
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2220 #endif
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2221 }
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2222
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2223 void pidgin_clear_cursor(GtkWidget *widget)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2224 {
13470
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2225 g_return_if_fail(widget != NULL);
5550131ec50b [gaim-migrate @ 15845]
Richard Laager <rlaager@pidgin.im>
parents: 13435
diff changeset
2226 if (widget->window == NULL)
13435
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2227 return;
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2228
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2229 gdk_window_set_cursor(widget->window, NULL);
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2230 }
4c22eed6e0a6 [gaim-migrate @ 15809]
Richard Laager <rlaager@pidgin.im>
parents: 13372
diff changeset
2231
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2232 struct _icon_chooser {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2233 GtkWidget *icon_filesel;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2234 GtkWidget *icon_preview;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2235 GtkWidget *icon_text;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2236
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2237 void (*callback)(const char*,gpointer);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2238 gpointer data;
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
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2241 #if !GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2242 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2243 icon_filesel_delete_cb(GtkWidget *w, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2244 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2245 if (dialog->icon_filesel != NULL)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2246 gtk_widget_destroy(dialog->icon_filesel);
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 if (dialog->callback)
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2249 dialog->callback(NULL, dialog->data);
14195
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 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2252 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2253 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2254
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
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2257 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2258 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2259 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
2260 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2261 char *filename, *current_folder;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2262
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2263 if (response != GTK_RESPONSE_ACCEPT) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2264 if (response == GTK_RESPONSE_CANCEL) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2265 gtk_widget_destroy(dialog->icon_filesel);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2266 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2267 dialog->icon_filesel = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2268 if (dialog->callback)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2269 dialog->callback(NULL, dialog->data);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2270 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2271 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2272 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2273
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2274 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
2275 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
2276 if (current_folder != NULL) {
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16071
diff changeset
2277 purple_prefs_set_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder", current_folder);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2278 g_free(current_folder);
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
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2281 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2282 static void
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2283 icon_filesel_choose_cb(GtkWidget *w, struct _icon_chooser *dialog)
14195
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 char *filename, *current_folder;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2286
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2287 filename = g_strdup(gtk_file_selection_get_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2288 GTK_FILE_SELECTION(dialog->icon_filesel)));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2289
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2290 /* If they typed in a directory, change there */
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2291 if (pidgin_check_if_dir(filename,
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2292 GTK_FILE_SELECTION(dialog->icon_filesel)))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2293 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2294 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2295 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2296 }
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 current_folder = g_path_get_dirname(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2299 if (current_folder != NULL) {
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16071
diff changeset
2300 purple_prefs_set_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder", current_folder);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2301 g_free(current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2302 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2303
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2304 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2305 if (dialog->callback)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2306 dialog->callback(filename, dialog->data);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2307 gtk_widget_destroy(dialog->icon_filesel);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2308 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2309 g_free(dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2310 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2311
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2312
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2313 static void
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2314 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2315 icon_preview_change_cb(GtkFileChooser *widget, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2316 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2317 icon_preview_change_cb(GtkTreeSelection *sel, struct _icon_chooser *dialog)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2318 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2319 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2320 GdkPixbuf *pixbuf, *scale;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2321 int height, width;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2322 char *basename, *markup, *size;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2323 struct stat st;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2324 char *filename;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2325
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2326 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2327 filename = gtk_file_chooser_get_preview_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2328 GTK_FILE_CHOOSER(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2329 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2330 filename = g_strdup(gtk_file_selection_get_filename(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2331 GTK_FILE_SELECTION(dialog->icon_filesel)));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2332 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2333
17046
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2334 if (!filename || g_stat(filename, &st) || !(pixbuf = gdk_pixbuf_new_from_file(filename, NULL)))
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2335 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2336 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2337 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), "");
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2338 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2339 return;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2340 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2341
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2342 width = gdk_pixbuf_get_width(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2343 height = gdk_pixbuf_get_height(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2344 basename = g_path_get_basename(filename);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2345 size = purple_str_size_to_units(st.st_size);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2346 markup = g_strdup_printf(_("<b>File:</b> %s\n"
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2347 "<b>File size:</b> %s\n"
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2348 "<b>Image size:</b> %dx%d"),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2349 basename, size, width, height);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2350
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2351 scale = gdk_pixbuf_scale_simple(pixbuf, width * 50 / height,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2352 50, GDK_INTERP_BILINEAR);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2353 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->icon_preview), scale);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2354 gtk_label_set_markup(GTK_LABEL(dialog->icon_text), markup);
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 g_object_unref(G_OBJECT(pixbuf));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2357 g_object_unref(G_OBJECT(scale));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2358 g_free(filename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2359 g_free(basename);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2360 g_free(size);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2361 g_free(markup);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2362 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2363
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2364
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2365 GtkWidget *pidgin_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
2366 struct _icon_chooser *dialog = g_new0(struct _icon_chooser, 1);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2367
17046
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2368 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2369 GtkWidget *vbox;
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2370 #else
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2371 GtkWidget *hbox;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2372 GtkWidget *tv;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2373 GtkTreeSelection *sel;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2374 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2375 const char *current_folder;
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 dialog->callback = callback;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2378 dialog->data = data;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2379
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2380 if (dialog->icon_filesel != NULL) {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2381 gtk_window_present(GTK_WINDOW(dialog->icon_filesel));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2382 return NULL;
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
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16071
diff changeset
2385 current_folder = purple_prefs_get_path(PIDGIN_PREFS_ROOT "/filelocations/last_icon_folder");
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2386 #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2387
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2388 dialog->icon_filesel = gtk_file_chooser_dialog_new(_("Buddy Icon"),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2389 parent,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2390 GTK_FILE_CHOOSER_ACTION_OPEN,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2391 GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2392 GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2393 NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2394 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
2395 if ((current_folder != NULL) && (*current_folder != '\0'))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2396 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
2397 current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2398
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2399 dialog->icon_preview = gtk_image_new();
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2400 dialog->icon_text = gtk_label_new(NULL);
17046
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2401
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2402 vbox = gtk_vbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2403 gtk_widget_set_size_request(GTK_WIDGET(vbox), -1, 50);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2404 gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_preview), TRUE, FALSE, 0);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2405 gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(dialog->icon_text), FALSE, FALSE, 0);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2406 gtk_widget_show_all(vbox);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2407
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2408 gtk_file_chooser_set_preview_widget(GTK_FILE_CHOOSER(dialog->icon_filesel), vbox);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2409 gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog->icon_filesel), TRUE);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2410 gtk_file_chooser_set_use_preview_label(GTK_FILE_CHOOSER(dialog->icon_filesel), FALSE);
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2411
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2412 g_signal_connect(G_OBJECT(dialog->icon_filesel), "update-preview",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2413 G_CALLBACK(icon_preview_change_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2414 g_signal_connect(G_OBJECT(dialog->icon_filesel), "response",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2415 G_CALLBACK(icon_filesel_choose_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2416 icon_preview_change_cb(NULL, dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2417 #else /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2418 dialog->icon_filesel = gtk_file_selection_new(_("Buddy Icon"));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2419 dialog->icon_preview = gtk_image_new();
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2420 dialog->icon_text = gtk_label_new(NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2421 if ((current_folder != NULL) && (*current_folder != '\0'))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2422 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->icon_filesel),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2423 current_folder);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2424
17046
e1fcb4c68dab Display the image info label in the icon chooser preview area. I'm not sure why this was only being displayed in the pre-GTK 2.4.0 chooser. Also, always use our preview widget - we don't need to fallback to the GTK default previewer, this fixes #458 and seems like the right thing to do in this case.
Daniel Atallah <datallah@pidgin.im>
parents: 17038
diff changeset
2425 gtk_widget_set_size_request(GTK_WIDGET(dialog->icon_preview),-1, 50);
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
2426 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2427 gtk_box_pack_start(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2428 GTK_BOX(GTK_FILE_SELECTION(dialog->icon_filesel)->main_vbox),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2429 hbox, FALSE, FALSE, 0);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2430 gtk_box_pack_end(GTK_BOX(hbox), dialog->icon_preview,
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2431 FALSE, FALSE, 0);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2432 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
2433
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2434 tv = GTK_FILE_SELECTION(dialog->icon_filesel)->file_list;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2435 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2436
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2437 g_signal_connect(G_OBJECT(sel), "changed",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2438 G_CALLBACK(icon_preview_change_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2439 g_signal_connect(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2440 G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->ok_button),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2441 "clicked",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2442 G_CALLBACK(icon_filesel_choose_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2443 g_signal_connect(
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2444 G_OBJECT(GTK_FILE_SELECTION(dialog->icon_filesel)->cancel_button),
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2445 "clicked",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2446 G_CALLBACK(icon_filesel_delete_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2447 g_signal_connect(G_OBJECT(dialog->icon_filesel), "destroy",
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2448 G_CALLBACK(icon_filesel_delete_cb), dialog);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2449 #endif /* FILECHOOSER */
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2450 return dialog->icon_filesel;
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
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2454 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2455 static gboolean
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2456 str_array_match(char **a, char **b)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2457 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2458 int i, j;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2459
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2460 if (!a || !b)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2461 return FALSE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2462 for (i = 0; a[i] != NULL; i++)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2463 for (j = 0; b[j] != NULL; j++)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2464 if (!g_ascii_strcasecmp(a[i], b[j]))
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2465 return TRUE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2466 return FALSE;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2467 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2468 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2469
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2470 gpointer
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2471 pidgin_convert_buddy_icon(PurplePlugin *plugin, const char *path, size_t *len)
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2472 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2473 PurplePluginProtocolInfo *prpl_info;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2474 #if GTK_CHECK_VERSION(2,2,0)
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2475 char **prpl_formats;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2476 int width, height;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2477 char **pixbuf_formats = NULL;
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
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2487 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
14203
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2488
f3a50c328ddc [gaim-migrate @ 16783]
Mark Doliner <markdoliner@pidgin.im>
parents: 14196
diff changeset
2489 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
2490
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2491
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2492 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2493 #if GTK_CHECK_VERSION(2,4,0)
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2494 format = gdk_pixbuf_get_file_info(path, &width, &height);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2495 #else
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2496 loader = gdk_pixbuf_loader_new();
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2497 if (g_file_get_contents(path, &contents, &length, NULL)) {
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2498 gdk_pixbuf_loader_write(loader, contents, length, NULL);
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2499 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2500 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2501 gdk_pixbuf_loader_close(loader, NULL);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2502 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2503 width = gdk_pixbuf_get_width(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2504 height = gdk_pixbuf_get_height(pixbuf);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2505 format = gdk_pixbuf_loader_get_format(loader);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2506 g_object_unref(G_OBJECT(loader));
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2507 #endif
14206
5a17eb1a2c3e [gaim-migrate @ 16786]
Mark Doliner <markdoliner@pidgin.im>
parents: 14203
diff changeset
2508 if (format == NULL)
5a17eb1a2c3e [gaim-migrate @ 16786]
Mark Doliner <markdoliner@pidgin.im>
parents: 14203
diff changeset
2509 return NULL;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2510
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2511 pixbuf_formats = gdk_pixbuf_format_get_extensions(format);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2512 prpl_formats = g_strsplit(prpl_info->icon_spec.format,",",0);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2513 if (str_array_match(pixbuf_formats, prpl_formats) && /* This is an acceptable format AND */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2514 (!(prpl_info->icon_spec.scale_rules & PURPLE_ICON_SCALE_SEND) || /* The prpl doesn't scale before it sends OR */
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2515 (prpl_info->icon_spec.min_width <= width &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2516 prpl_info->icon_spec.max_width >= width &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2517 prpl_info->icon_spec.min_height <= height &&
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2518 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
2519 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2520 {
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2521 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2522 g_strfreev(prpl_formats);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2523 g_strfreev(pixbuf_formats);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2524 #endif
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2525 /* We don't need to scale the image. */
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2526
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2527 contents = NULL;
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2528 if (!g_file_get_contents(path, &contents, &length, NULL))
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2529 {
15284
98e8f9912107 [gaim-migrate @ 18012]
Mark Doliner <markdoliner@pidgin.im>
parents: 15254
diff changeset
2530 g_free(contents);
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2531 #if GTK_CHECK_VERSION(2,2,0) && !GTK_CHECK_VERSION(2,4,0)
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2532 g_object_unref(G_OBJECT(pixbuf));
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2533 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2534 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2535 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2536 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2537 #if GTK_CHECK_VERSION(2,2,0)
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2538 else
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 int i;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2541 GError *error = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2542 GdkPixbuf *scale;
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2543 gboolean success = FALSE;
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2544 char *filename = NULL;
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2545
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2546 g_strfreev(pixbuf_formats);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2547
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2548 pixbuf = gdk_pixbuf_new_from_file(path, &error);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2549 if (error) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2550 purple_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2551 g_error_free(error);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2552 g_strfreev(prpl_formats);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2553 return NULL;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2554 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2555
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2556 if ((prpl_info->icon_spec.scale_rules & PURPLE_ICON_SCALE_SEND) &&
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2557 (width < prpl_info->icon_spec.min_width ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2558 width > prpl_info->icon_spec.max_width ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2559 height < prpl_info->icon_spec.min_height ||
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2560 height > prpl_info->icon_spec.max_height))
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 int new_width = width;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2563 int new_height = height;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2564
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2565 purple_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
2566
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2567 scale = gdk_pixbuf_scale_simple(pixbuf, new_width, new_height,
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2568 GDK_INTERP_HYPER);
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 pixbuf = scale;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2571 }
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 for (i = 0; prpl_formats[i]; i++) {
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2574 FILE *fp;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2575
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2576 g_free(filename);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2577 fp = purple_mkstemp(&filename, TRUE);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2578 if (!fp)
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2579 {
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2580 g_free(filename);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2581 return NULL;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2582 }
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2583 fclose(fp);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2584
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2585 purple_debug_info("buddyicon", "Converting buddy icon to %s as %s\n", prpl_formats[i], filename);
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2586 /* The "compression" param wasn't supported until gdk-pixbuf 2.8.
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2587 * Using it in previous versions causes the save to fail (and an assert message). */
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2588 if ((gdk_pixbuf_major_version > 2 || (gdk_pixbuf_major_version == 2
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2589 && gdk_pixbuf_minor_version >= 8))
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2590 && strcmp(prpl_formats[i], "png") == 0) {
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2591 if (gdk_pixbuf_save(pixbuf, filename, prpl_formats[i],
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2592 &error, "compression", "9", NULL)) {
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2593 success = TRUE;
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2594 break;
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2595 }
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2596 } else if (gdk_pixbuf_save(pixbuf, filename, prpl_formats[i],
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2597 &error, NULL)) {
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2598 success = TRUE;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2599 break;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2600 }
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2601
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2602 /* The NULL checking is necessary due to this bug:
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2603 * http://bugzilla.gnome.org/show_bug.cgi?id=405539 */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2604 purple_debug_warning("buddyicon", "Could not convert to %s: %s\n", prpl_formats[i],
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2605 (error && error->message) ? error->message : "Unknown error");
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2606 g_error_free(error);
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2607 error = NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2608 }
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2609 g_strfreev(prpl_formats);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2610 g_object_unref(G_OBJECT(pixbuf));
15645
db8c01fc8637 Work around gdk-pixbuf brokenness when dealing with unrecognized parameters. Also, improve the error handling so we don't get a confusing error message.
Daniel Atallah <datallah@pidgin.im>
parents: 15635
diff changeset
2611 if (!success) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2612 purple_debug_error("buddyicon", "Could not convert icon to usable format.\n");
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2613 return NULL;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2614 }
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2615
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2616 contents = NULL;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2617 if (!g_file_get_contents(filename, &contents, &length, NULL))
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2618 {
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2619 purple_debug_error("buddyicon",
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2620 "Could not read '%s', which we just wrote to disk.\n",
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2621 filename);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2622
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2623 g_free(contents);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2624 g_free(filename);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2625 return NULL;
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2626 }
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2627
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2628 g_unlink(filename);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2629 g_free(filename);
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2630 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2631
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2632 /* Check the image size */
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2633 /*
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2634 * 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
2635 * the prpl supported jpeg, and then we could convert to that
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2636 * and use a lower quality setting.
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2637 */
15302
e220a1a988a3 [gaim-migrate @ 18030]
Mark Doliner <markdoliner@pidgin.im>
parents: 15301
diff changeset
2638 if ((prpl_info->icon_spec.max_filesize != 0) &&
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2639 (length > prpl_info->icon_spec.max_filesize))
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 gchar *tmp;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2642 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
2643 path, plugin->info->name);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2644 purple_notify_error(NULL, _("Icon Error"),
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2645 _("Could not set icon"), tmp);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2646 purple_debug_info("buddyicon",
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2647 "'%s' was converted to an image which is %" G_GSIZE_FORMAT
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2648 " bytes, but the maximum icon size for %s is %" G_GSIZE_FORMAT
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2649 " bytes\n", path, length, plugin->info->name,
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2650 prpl_info->icon_spec.max_filesize);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2651 g_free(tmp);
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2652 return NULL;
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2653 }
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2654
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2655 if (len)
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2656 *len = length;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2657 return contents;
15289
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2658 #else
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 * 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
2661 * GTK+ 2.0 so we can't scale it.
2b90dc4e1483 [gaim-migrate @ 18017]
Mark Doliner <markdoliner@pidgin.im>
parents: 15284
diff changeset
2662 */
14195
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2663 return NULL;
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2664 #endif
0f7cb3b272b2 [gaim-migrate @ 16775]
Sean Egan <seanegan@pidgin.im>
parents: 14097
diff changeset
2665 }
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2666
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2667 #if !GTK_CHECK_VERSION(2,6,0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2668 static void
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2669 _gdk_file_scale_size_prepared_cb (GdkPixbufLoader *loader,
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2670 int width,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2671 int height,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2672 gpointer data)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2673 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2674 struct {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2675 gint width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2676 gint height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2677 gboolean preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2678 } *info = data;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2679
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2680 g_return_if_fail (width > 0 && height > 0);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2681
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2682 if (info->preserve_aspect_ratio &&
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2683 (info->width > 0 || info->height > 0)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2684 if (info->width < 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2685 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2686 width = width * (double)info->height/(double)height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2687 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2688 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2689 else if (info->height < 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2690 {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2691 height = height * (double)info->width/(double)width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2692 width = info->width;
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 else if ((double)height * (double)info->width >
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2695 (double)width * (double)info->height) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2696 width = 0.5 + (double)width * (double)info->height / (double)height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2697 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2698 } else {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2699 height = 0.5 + (double)height * (double)info->width / (double)width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2700 width = info->width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2701 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2702 } else {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2703 if (info->width > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2704 width = info->width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2705 if (info->height > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2706 height = info->height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2707 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2708
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2709 #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
2710 gdk_pixbuf_loader_set_size (loader, width, height);
14720
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2711 #else
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2712 #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
2713 #warning ... good luck ... your images may end up strange sizes
6751e3e9c5bf [gaim-migrate @ 17404]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14717
diff changeset
2714 #endif
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2715 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2716
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2717 GdkPixbuf *
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2718 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
2719 gboolean preserve_aspect_ratio,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2720 GError **error)
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 GdkPixbufLoader *loader;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2723 GdkPixbuf *pixbuf;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2724 guchar buffer [4096];
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2725 int length;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2726 FILE *f;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2727 struct {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2728 gint width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2729 gint height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2730 gboolean preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2731 } info;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2732 GdkPixbufAnimation *animation;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2733 GdkPixbufAnimationIter *iter;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2734 gboolean has_frame;
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 g_return_val_if_fail (filename != NULL, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2737 g_return_val_if_fail (width > 0 || width == -1, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2738 g_return_val_if_fail (height > 0 || height == -1, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2739
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2740 f = g_fopen (filename, "rb");
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2741 if (!f) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2742 gint save_errno = errno;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2743 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
2744 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
2745 _("Failed to open file '%s': %s"),
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2746 display_name ? display_name : "(unknown)",
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2747 g_strerror (save_errno));
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2748 g_free (display_name);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2749 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2750 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2751
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2752 loader = gdk_pixbuf_loader_new ();
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2753
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2754 info.width = width;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2755 info.height = height;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2756 info.preserve_aspect_ratio = preserve_aspect_ratio;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2757
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2758 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
2759
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2760 has_frame = FALSE;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2761 while (!has_frame && !feof (f) && !ferror (f)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2762 length = fread (buffer, 1, sizeof (buffer), f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2763 if (length > 0)
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2764 if (!gdk_pixbuf_loader_write (loader, buffer, length, error)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2765 gdk_pixbuf_loader_close (loader, NULL);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2766 fclose (f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2767 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2768 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2769 }
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 animation = gdk_pixbuf_loader_get_animation (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2772 if (animation) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2773 iter = gdk_pixbuf_animation_get_iter (animation, 0);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2774 if (!gdk_pixbuf_animation_iter_on_currently_loading_frame (iter)) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2775 has_frame = TRUE;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2776 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2777 g_object_unref (iter);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2778 }
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
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2781 fclose (f);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2782
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2783 if (!gdk_pixbuf_loader_close (loader, error) && !has_frame) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2784 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2785 return NULL;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2786 }
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2787
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2788 pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
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 if (!pixbuf) {
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2791 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
2792 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2793 g_set_error (error, GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_FAILED,
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2794 _("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
2795 display_name ? display_name : "(unknown)");
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2796 g_free (display_name);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2797 return NULL;
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 g_object_ref (pixbuf);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2801
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2802 g_object_unref (loader);
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2803
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2804 return pixbuf;
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2805 }
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
2806 #endif /* ! Gtk 2.6.0 */
14290
f20819ff8d86 [gaim-migrate @ 16910]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 14253
diff changeset
2807
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2808 void pidgin_set_custom_buddy_icon(PurpleAccount *account, const char *who, const char *filename)
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2809 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2810 PurpleBuddy *buddy;
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2811 PurpleContact *contact;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2812 gpointer data = NULL;
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2813 size_t len = 0;
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2814
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2815 buddy = purple_find_buddy(account, who);
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2816 if (!buddy) {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2817 purple_debug_info("custom-icon", "You can only set custom icon for someone in your buddylist.\n");
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2818 return;
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2819 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2820
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2821 contact = purple_buddy_get_contact(buddy);
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2822
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2823 if (filename) {
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2824 const char *prpl_id = purple_account_get_protocol_id(account);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2825 PurplePlugin *prpl = purple_find_prpl(prpl_id);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2826
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2827 data = pidgin_convert_buddy_icon(prpl, filename, &len);
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2828
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2829 /* We don't want to delete the old icon if the new one didn't load. */
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2830 if (data == NULL)
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2831 return;
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2832 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2833
16446
3a6ed6c3400e Fix the custom icon stuff, and various memory leaks. At this point, custom
Richard Laager <rlaager@pidgin.im>
parents: 16437
diff changeset
2834 purple_buddy_icons_set_custom_icon(contact, data, len);
14914
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2835 }
290eb2170f38 [gaim-migrate @ 17621]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 14781
diff changeset
2836
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2837 char *pidgin_make_pretty_arrows(const char *str)
15084
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2838 {
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2839 char *ret;
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2840 char **split = g_strsplit(str, "->", -1);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2841 ret = g_strjoinv("\342\207\250", split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2842 g_strfreev(split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2843
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2844 split = g_strsplit(ret, "<-", -1);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2845 g_free(ret);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2846 ret = g_strjoinv("\342\207\246", split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2847 g_strfreev(split);
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2848
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2849 return ret;
6cb675dea5fb [gaim-migrate @ 17804]
Sean Egan <seanegan@pidgin.im>
parents: 14914
diff changeset
2850 }
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2851
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2852 void pidgin_set_urgent(GtkWindow *window, gboolean urgent)
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2853 {
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2854 #if GTK_CHECK_VERSION(2,8,0)
15410
b56fbd3662b9 [gaim-migrate @ 18141]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15409
diff changeset
2855 gtk_window_set_urgency_hint(window, urgent);
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2856 #elif defined _WIN32
15574
18d9d1c05994 Win32 de-gaimification of pidgin
Daniel Atallah <datallah@pidgin.im>
parents: 15568
diff changeset
2857 winpidgin_window_flash(window, urgent);
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2858 #else
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2859 GdkWindow *gdkwin;
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2860 XWMHints *hints;
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2861
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2862 g_return_if_fail(window != NULL);
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2863
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2864 gdkwin = GTK_WIDGET(window)->window;
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2865
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2866 g_return_if_fail(gdkwin != NULL);
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2867
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2868 hints = XGetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2869 GDK_WINDOW_XWINDOW(gdkwin));
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2870 if(!hints)
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2871 hints = XAllocWMHints();
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2872
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2873 if (urgent)
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2874 hints->flags |= XUrgencyHint;
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2875 else
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2876 hints->flags &= ~XUrgencyHint;
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2877 XSetWMHints(GDK_WINDOW_XDISPLAY(gdkwin),
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2878 GDK_WINDOW_XWINDOW(gdkwin), hints);
15403
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2879 XFree(hints);
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2880 #endif
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2881 }
116f7fcb07a8 [gaim-migrate @ 18134]
Sean Egan <seanegan@pidgin.im>
parents: 15320
diff changeset
2882
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2883 GSList *minidialogs = NULL;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2884
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2885 static void *
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2886 pidgin_utils_get_handle()
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2887 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2888 static int handle;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2889
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2890 return &handle;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2891 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2892
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2893 static void connection_signed_off_cb(PurpleConnection *gc)
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2894 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2895 GSList *list;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2896 for (list = minidialogs; list; list = list->next) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2897 if (g_object_get_data(G_OBJECT(list->data), "gc") == gc) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2898 gtk_widget_destroy(GTK_WIDGET(list->data));
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2899 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2900 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2901 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2902
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2903 static void alert_killed_cb(GtkWidget *widget)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2904 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2905 minidialogs = g_slist_remove(minidialogs, widget);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2906 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2907
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2908 void *pidgin_make_mini_dialog(PurpleConnection *gc, const char *icon_name,
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2909 const char *primary, const char *secondary,
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2910 void *user_data, ...)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2911 {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2912 GtkWidget *vbox;
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2913 GtkWidget *hbox;
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2914 GtkWidget *hbox2;
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2915 GtkWidget *label;
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2916 GtkWidget *button;
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2917 GtkWidget *img = NULL;
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
2918 GtkSizeGroup *sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2919 char label_text[2048];
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2920 const char *button_text;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2921 GCallback callback;
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2922 char *primary_esc, *secondary_esc = NULL;
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2923 va_list args;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2924 static gboolean first_call = TRUE;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2925
15497
92f02f4bd5ee Dialog icon changes
Sean Egan <seanegan@pidgin.im>
parents: 15496
diff changeset
2926 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
2927 gtk_misc_set_alignment(GTK_MISC(img), 0, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2928
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2929 vbox = gtk_vbox_new(FALSE,0);
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2930 gtk_container_set_border_width(GTK_CONTAINER(vbox), PIDGIN_HIG_BOX_SPACE);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2931
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2932 g_object_set_data(G_OBJECT(vbox), "gc" ,gc);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2933 minidialogs = g_slist_prepend(minidialogs, vbox);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2934 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
2935
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2936 if (first_call) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2937 first_call = FALSE;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2938 purple_signal_connect(purple_connections_get_handle(), "signed-off",
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
2939 pidgin_utils_get_handle(),
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
2940 PURPLE_CALLBACK(connection_signed_off_cb), NULL);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2941 }
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2942
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2943 hbox = gtk_hbox_new(FALSE, 0);
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2944 gtk_container_add(GTK_CONTAINER(vbox), hbox);
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2945
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2946 if (img != NULL)
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2947 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
2948
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2949 primary_esc = g_markup_escape_text(primary, -1);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2950
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2951 if (secondary)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2952 secondary_esc = g_markup_escape_text(secondary, -1);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2953 g_snprintf(label_text, sizeof(label_text),
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2954 "<span weight=\"bold\" size=\"smaller\">%s</span>%s<span size=\"smaller\">%s</span>",
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2955 primary_esc, secondary ? "\n" : "", secondary_esc ? secondary_esc : "");
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2956 g_free(primary_esc);
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2957 g_free(secondary_esc);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2958 label = gtk_label_new(NULL);
16123
8b98683319e7 Rename /purple/gtk preferences back to /gaim/gtk to allow for smooth upgrades
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 16071
diff changeset
2959 gtk_widget_set_size_request(label, purple_prefs_get_int(PIDGIN_PREFS_ROOT "/blist/width")-25,-1);
15246
9663c7183a75 [gaim-migrate @ 17973]
Sean Egan <seanegan@pidgin.im>
parents: 15197
diff changeset
2960 gtk_label_set_markup(GTK_LABEL(label), label_text);
16643
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2961 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2962 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
f9a30c6f74ff Plug leak.
Daniel Atallah <datallah@pidgin.im>
parents: 16545
diff changeset
2963 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
2964
15882
1dbd5756b7bf More Gaim to Pidgin stuff
Sean Egan <seanegan@pidgin.im>
parents: 15799
diff changeset
2965 hbox2 = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
2966 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
2967
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2968 va_start(args, user_data);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2969 while ((button_text = va_arg(args, char*))) {
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2970 callback = va_arg(args, GCallback);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2971 button = gtk_button_new();
15409
37b46bbce4cb [gaim-migrate @ 18140]
Daniel Atallah <datallah@pidgin.im>
parents: 15405
diff changeset
2972
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2973 if (callback)
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2974 g_signal_connect_swapped(G_OBJECT(button), "clicked", callback, user_data);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2975 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
2976 hbox = gtk_hbox_new(FALSE, 0);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2977 gtk_container_add(GTK_CONTAINER(button), hbox);
15096
128dd2bdf71d [gaim-migrate @ 17817]
Sean Egan <seanegan@pidgin.im>
parents: 15094
diff changeset
2978 gtk_container_set_border_width(GTK_CONTAINER(hbox), 3);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2979 g_snprintf(label_text, sizeof(label_text),
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2980 "<span size=\"smaller\">%s</span>", button_text);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2981 label = gtk_label_new(NULL);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2982 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), label_text);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2983 gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2984 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
2985 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
2986 gtk_size_group_add_widget(sg, button);
15094
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2987 }
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2988 va_end(args);
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2989
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2990 return vbox;
7ebf5dd7d969 [gaim-migrate @ 17815]
Sean Egan <seanegan@pidgin.im>
parents: 15084
diff changeset
2991 }
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2992
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2993 /*
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2994 * "This is so dead sexy."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2995 * "Two thumbs up."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2996 * "Best movie of the year."
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2997 *
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
2998 * 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
2999 * 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
3000 * entered string.
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3001 *
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3002 * 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
3003 * "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
3004 * 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
3005 * 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
3006 * used rarely, so it shouldn't matter TOO much.
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3007 */
15562
8c8249fe5e3c gaim_gtk to pidgin. I hope
Sean Egan <seanegan@pidgin.im>
parents: 15506
diff changeset
3008 gboolean pidgin_tree_view_search_equal_func(GtkTreeModel *model, gint column,
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3009 const gchar *key, GtkTreeIter *iter, gpointer data)
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3010 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3011 gchar *enteredstring;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3012 gchar *tmp;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3013 gchar *withmarkup;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3014 gchar *nomarkup;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3015 gchar *normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3016 gboolean result;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3017 size_t i;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3018 size_t len;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3019 PangoLogAttr *log_attrs;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3020 gchar *word;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3021
17155
143ff2796376 Replace strcasecmp() calls with glib equivalents.
Richard Laager <rlaager@pidgin.im>
parents: 17116
diff changeset
3022 if (g_ascii_strcasecmp(key, "Global Thermonuclear War") == 0)
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3023 {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
3024 purple_notify_info(NULL, "WOPR",
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3025 "Wouldn't you prefer a nice game of chess?", NULL);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3026 return FALSE;
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
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3029 gtk_tree_model_get(model, iter, column, &withmarkup, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3030 if (withmarkup == NULL) /* This is probably a separator */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3031 return TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3032
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3033 tmp = g_utf8_normalize(key, -1, G_NORMALIZE_DEFAULT);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3034 enteredstring = g_utf8_casefold(tmp, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3035 g_free(tmp);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3036
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
3037 nomarkup = purple_markup_strip_html(withmarkup);
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3038 tmp = g_utf8_normalize(nomarkup, -1, G_NORMALIZE_DEFAULT);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3039 g_free(nomarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3040 normalized = g_utf8_casefold(tmp, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3041 g_free(tmp);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3042
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
3043 if (purple_str_has_prefix(normalized, enteredstring))
15177
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 g_free(withmarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3046 g_free(enteredstring);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3047 g_free(normalized);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3048 return FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3049 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3050
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3051
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3052 /* Use Pango to separate by words. */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3053 len = g_utf8_strlen(normalized, -1);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3054 log_attrs = g_new(PangoLogAttr, len + 1);
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 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
3057
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3058 word = normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3059 result = TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3060 for (i = 0; i < (len - 1) ; i++)
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 if (log_attrs[i].is_word_start &&
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
3063 purple_str_has_prefix(word, enteredstring))
15177
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3064 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3065 result = FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3066 break;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3067 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3068 word = g_utf8_next_char(word);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3069 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3070 g_free(log_attrs);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3071
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3072 /* The non-Pango version. */
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3073 #if 0
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3074 word = normalized;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3075 result = TRUE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3076 while (word[0] != '\0')
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3077 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3078 gunichar c = g_utf8_get_char(word);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3079 if (!g_unichar_isalnum(c))
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3080 {
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3081 word = g_utf8_find_next_char(word, NULL);
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15883
diff changeset
3082 if (purple_str_has_prefix(word, enteredstring))
15177
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 result = FALSE;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3085 break;
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3086 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3087 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3088 else
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3089 word = g_utf8_find_next_char(word, NULL);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3090 }
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3091 #endif
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3092
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3093 g_free(withmarkup);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3094 g_free(enteredstring);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3095 g_free(normalized);
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3096
8b6c66e09388 [gaim-migrate @ 17901]
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 15114
diff changeset
3097 return result;
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
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3100
15568
cd19bb5a51b8 gtkutils changes
Sean Egan <seanegan@pidgin.im>
parents: 15562
diff changeset
3101 gboolean pidgin_gdk_pixbuf_is_opaque(GdkPixbuf *pixbuf) {
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3102 int width, height, rowstride, i;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3103 unsigned char *pixels;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3104 unsigned char *row;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3105
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3106 if (!gdk_pixbuf_get_has_alpha(pixbuf))
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3107 return TRUE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3108
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3109 width = gdk_pixbuf_get_width (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3110 height = gdk_pixbuf_get_height (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3111 rowstride = gdk_pixbuf_get_rowstride (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3112 pixels = gdk_pixbuf_get_pixels (pixbuf);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3113
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3114 row = pixels;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3115 for (i = 3; i < rowstride; i+=4) {
17605
bb9b2209ae37 Fix rounding of buddy icons, it looks like when MSN Messenger converts jpgs
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17527
diff changeset
3116 if (row[i] < 0xfe)
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3117 return FALSE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3118 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3119
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3120 for (i = 1; i < height - 1; i++) {
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3121 row = pixels + (i*rowstride);
17605
bb9b2209ae37 Fix rounding of buddy icons, it looks like when MSN Messenger converts jpgs
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17527
diff changeset
3122 if (row[3] < 0xfe || row[rowstride-1] < 0xfe) {
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3123 return FALSE;
17605
bb9b2209ae37 Fix rounding of buddy icons, it looks like when MSN Messenger converts jpgs
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17527
diff changeset
3124 }
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3125 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3126
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3127 row = pixels + ((height-1) * rowstride);
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3128 for (i = 3; i < rowstride; i+=4) {
17605
bb9b2209ae37 Fix rounding of buddy icons, it looks like when MSN Messenger converts jpgs
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 17527
diff changeset
3129 if (row[i] < 0xfe)
15474
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3130 return FALSE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3131 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3132
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3133 return TRUE;
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3134 }
673a21839b11 More statusbox tweaks:
Sean Egan <seanegan@pidgin.im>
parents: 15442
diff changeset
3135
18275
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3136 void pidgin_gdk_pixbuf_make_round(GdkPixbuf *pixbuf) {
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3137 int width, height, rowstride;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3138 guchar *pixels;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3139 if (!gdk_pixbuf_get_has_alpha(pixbuf))
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3140 return;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3141 width = gdk_pixbuf_get_width(pixbuf);
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3142 height = gdk_pixbuf_get_height(pixbuf);
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3143 rowstride = gdk_pixbuf_get_rowstride(pixbuf);
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3144 pixels = gdk_pixbuf_get_pixels(pixbuf);
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3145
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3146 if (width < 6 || height < 6)
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3147 return;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3148 /* Top left */
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3149 pixels[3] = 0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3150 pixels[7] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3151 pixels[11] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3152 pixels[rowstride + 3] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3153 pixels[rowstride * 2 + 3] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3154
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3155 /* Top right */
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3156 pixels[width * 4 - 1] = 0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3157 pixels[width * 4 - 5] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3158 pixels[width * 4 - 9] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3159 pixels[rowstride + (width * 4) - 1] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3160 pixels[(2 * rowstride) + (width * 4) - 1] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3161
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3162 /* Bottom left */
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3163 pixels[(height - 1) * rowstride + 3] = 0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3164 pixels[(height - 1) * rowstride + 7] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3165 pixels[(height - 1) * rowstride + 11] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3166 pixels[(height - 2) * rowstride + 3] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3167 pixels[(height - 3) * rowstride + 3] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3168
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3169 /* Bottom right */
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3170 pixels[height * rowstride - 1] = 0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3171 pixels[(height - 1) * rowstride - 1] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3172 pixels[(height - 2) * rowstride - 1] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3173 pixels[height * rowstride - 5] = 0x80;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3174 pixels[height * rowstride - 9] = 0xC0;
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3175 }
b9633ef422b0 Rounds icons in the infopane. Since gdk_pixbuf_animation_get_static_image seems to return pixbufs without alpha channels, this only rounds animated icons that aren't transparent.
Sean Egan <seanegan@pidgin.im>
parents: 18238
diff changeset
3176
18278
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3177 const char *pidgin_get_dim_grey_string(GtkWidget *widget) {
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3178 static char dim_grey_string[8] = "";
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3179 GtkStyle *style;
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3180
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3181 if (!widget)
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3182 return "dim grey";
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3183
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3184 style = gtk_widget_get_style(widget);
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3185 if (!style)
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3186 return "dim grey";
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3187
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3188 snprintf(dim_grey_string, sizeof(dim_grey_string), "#%02x%02x%02x",
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3189 style->text_aa[GTK_STATE_NORMAL].red >> 8,
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3190 style->text_aa[GTK_STATE_NORMAL].green >> 8,
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3191 style->text_aa[GTK_STATE_NORMAL].blue >> 8);
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3192 return dim_grey_string;
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3193 }
06bf54cee797 Chat topics in status line of chat infopanes
Sean Egan <seanegan@pidgin.im>
parents: 18275
diff changeset
3194
15320
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3195 #if !GTK_CHECK_VERSION(2,2,0)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3196 GtkTreePath *
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3197 gtk_tree_path_new_from_indices (gint first_index, ...)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3198 {
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3199 int arg;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3200 va_list args;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3201 GtkTreePath *path;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3202
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3203 path = gtk_tree_path_new ();
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3204
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3205 va_start (args, first_index);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3206 arg = first_index;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3207
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3208 while (arg != -1)
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3209 {
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3210 gtk_tree_path_append_index (path, arg);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3211 arg = va_arg (args, gint);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3212 }
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3213
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3214 va_end (args);
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3215
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3216 return path;
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3217 }
c4eea0409712 [gaim-migrate @ 18048]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 15302
diff changeset
3218 #endif
18185
d4f1719d812b merge of '26a92816b762feba6da1013204d48f8d4364797d'
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 18178 17879
diff changeset
3219
20036
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3220 static void
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3221 combo_box_changed_cb(GtkComboBox *combo_box, GtkEntry *entry)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3222 {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3223 char *text = gtk_combo_box_get_active_text(combo_box);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3224 gtk_entry_set_text(entry, text ? text : "");
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3225 g_free(text);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3226 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3227
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3228 static gboolean
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3229 entry_key_pressed_cb(GtkWidget *entry, GdkEventKey *key, GtkComboBox *combo)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3230 {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3231 if (key->keyval == GDK_Down || key->keyval == GDK_Up) {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3232 gtk_combo_box_popup(combo);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3233 return TRUE;
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3234 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3235 return FALSE;
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3236 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3237
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3238 GtkWidget *
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3239 pidgin_text_combo_box_entry_new(const char *default_item, GList *items)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3240 {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3241 GtkComboBox *ret = NULL;
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3242 GtkWidget *the_entry = NULL;
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3243
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3244 ret = GTK_COMBO_BOX(gtk_combo_box_new_text());
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3245 the_entry = gtk_entry_new();
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3246 gtk_container_add(GTK_CONTAINER(ret), the_entry);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3247
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3248 if (default_item)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3249 gtk_entry_set_text(GTK_ENTRY(the_entry), default_item);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3250
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3251 for (; items != NULL ; items = items->next) {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3252 char *text = items->data;
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3253 if (text && *text)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3254 gtk_combo_box_append_text(ret, text);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3255 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3256
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3257 g_signal_connect(G_OBJECT(ret), "changed", (GCallback)combo_box_changed_cb, the_entry);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3258 g_signal_connect_after(G_OBJECT(the_entry), "key-press-event", G_CALLBACK(entry_key_pressed_cb), ret);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3259
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3260 return GTK_WIDGET(ret);
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3261 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3262
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3263 const char *pidgin_text_combo_box_entry_get_text(GtkWidget *widget)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3264 {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3265 return gtk_entry_get_text(GTK_ENTRY(GTK_BIN((widget))->child));
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3266 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3267
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3268 void pidgin_text_combo_box_entry_set_text(GtkWidget *widget, const char *text)
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3269 {
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3270 gtk_entry_set_text(GTK_ENTRY(GTK_BIN((widget))->child), (text));
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3271 }
3bdbea94ad0c Part of #1332 to introduce pidgin_text_combo_box_new_entry and
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19859
diff changeset
3272

mercurial