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