src/gtkutils.c

Sat, 18 Sep 2004 23:17:38 +0000

author
Dave West <kat@users.sourceforge.net>
date
Sat, 18 Sep 2004 23:17:38 +0000
changeset 10040
b74aeb350fc5
parent 9910
7b4465b92411
child 10061
2833056ea11c
permissions
-rw-r--r--

[gaim-migrate @ 10999]
" Post all three of these to the sf patch tracker as
three separate patches and assign the buddy list
changes and oscar changes to me, and the
gaim_status_is_online() changes to Luke. And in the
one assigned to Luke, ask him if he could pretty please
with sugar on top check through it quickly and
commit it if it looks sensible?

--KingAnt

This adds gaim_status_is_online so that we can check
statuses as well as presences for online status. It
also changes gaim_presence_is_online to use the new
function." --Dave West

committer: Luke Schierer <lschiere@pidgin.im>

5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
1 /**
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
2 * @file gtkutils.h GTK+ utility functions
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
3 * @ingroup gtkui
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
4 *
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 * gaim
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6 *
8046
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
7 * Gaim is the legal property of its developers, whose names are too numerous
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
c581b20a47d6 [gaim-migrate @ 8730]
Sean Egan <seanegan@pidgin.im>
parents: 7988
diff changeset
9 * source distribution.
7060
717cbeb22b6d [gaim-migrate @ 7623]
Christian Hammond <chipx86@chipx86.com>
parents: 6846
diff changeset
10 *
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * (at your option) any later version.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * GNU General Public License for more details.
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 *
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 */
9791
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9767
diff changeset
25 #include "internal.h"
f5c5bda0b96b [gaim-migrate @ 10659]
Gary Kramlich <grim@pidgin.im>
parents: 9767
diff changeset
26 #include "gtkgaim.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
27
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 #ifndef _WIN32
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
29 # include <X11/Xlib.h>
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 #else
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
31 # ifdef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
32 # undef small
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
33 # endif
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #endif /*_WIN32*/
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
35
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
36 #ifdef USE_GTKSPELL
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
37 # include <gtkspell/gtkspell.h>
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
38 # ifdef _WIN32
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
39 # include "wspell.h"
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
40 # endif
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
41 #endif
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
42
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 #include <gdk/gdkkeysyms.h>
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
44
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
45 #include "debug.h"
7078
0d63d673f170 [gaim-migrate @ 7643]
Nathan Walp <nwalp@pidgin.im>
parents: 7060
diff changeset
46 #include "imgstore.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
47 #include "notify.h"
5548
200682124464 [gaim-migrate @ 5949]
Nathan Walp <nwalp@pidgin.im>
parents: 5530
diff changeset
48 #include "prefs.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49 #include "prpl.h"
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
50 #include "signals.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
51 #include "util.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
52
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
53 #include "gtkconv.h"
9709
2e73f176cc80 [gaim-migrate @ 10570]
Mark Doliner <markdoliner@pidgin.im>
parents: 9706
diff changeset
54 #include "gtkdialogs.h"
5872
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
55 #include "gtkimhtml.h"
754c63f29b77 [gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents: 5794
diff changeset
56 #include "gtkutils.h"
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
58 guint accels_save_timer = 0;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
59
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
60 static gboolean
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
61 url_clicked_idle_cb(gpointer data)
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
62 {
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
63 gaim_notify_uri(NULL, data);
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
64 g_free(data);
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
65 return FALSE;
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
66 }
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
67
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
68 static void
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
69 url_clicked_cb(GtkWidget *w, const char *uri)
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
70 {
8913
8380459a6da6 [gaim-migrate @ 9683]
Tim Ringenbach <marv@pidgin.im>
parents: 8901
diff changeset
71 g_idle_add(url_clicked_idle_cb, g_strdup(uri));
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
72 }
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
73
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
74 GtkIMHtmlFuncs gtkimhtml_cbs = {
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
75 (GtkIMHtmlGetImageFunc)gaim_imgstore_get,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
76 (GtkIMHtmlGetImageDataFunc)gaim_imgstore_get_data,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
77 (GtkIMHtmlGetImageSizeFunc)gaim_imgstore_get_size,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
78 (GtkIMHtmlGetImageFilenameFunc)gaim_imgstore_get_filename,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
79 gaim_imgstore_ref,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
80 gaim_imgstore_unref,
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
81 };
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
82
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83 void
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84 gaim_setup_imhtml(GtkWidget *imhtml)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86 g_return_if_fail(imhtml != NULL);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87 g_return_if_fail(GTK_IS_IMHTML(imhtml));
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89 g_signal_connect(G_OBJECT(imhtml), "url_clicked",
6465
bd201d637ff4 [gaim-migrate @ 6974]
Christian Hammond <chipx86@chipx86.com>
parents: 6430
diff changeset
90 G_CALLBACK(url_clicked_cb), NULL);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 smiley_themeize(imhtml);
8962
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
93
5cd12e525d95 [gaim-migrate @ 9736]
Tim Ringenbach <marv@pidgin.im>
parents: 8940
diff changeset
94 gtk_imhtml_set_funcs(GTK_IMHTML(imhtml), &gtkimhtml_cbs);
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 void
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98 toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 gboolean sensitivity = GTK_WIDGET_IS_SENSITIVE(to_toggle);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
102 gtk_widget_set_sensitive(to_toggle, !sensitivity);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
103 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
104
7751
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
105 void
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
106 gaim_gtk_set_sensitive_if_input(GtkWidget *entry, GtkWidget *dialog)
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
107 {
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
108 const char *text = gtk_entry_get_text(GTK_ENTRY(entry));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
109 gtk_dialog_set_response_sensitive(GTK_DIALOG(dialog), GTK_RESPONSE_OK,
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
110 (*text != '\0'));
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
111 }
e0dc18b50181 [gaim-migrate @ 8396]
Mark Doliner <markdoliner@pidgin.im>
parents: 7717
diff changeset
112
4359
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
113 void
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
114 gaim_gtk_toggle_sensitive(GtkWidget *widget, GtkWidget *to_toggle)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
115 {
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
116 gboolean sensitivity;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
117
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
118 if (to_toggle == NULL)
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
119 return;
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
120
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
121 sensitivity = GTK_WIDGET_IS_SENSITIVE(to_toggle);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
122
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
123 gtk_widget_set_sensitive(to_toggle, !sensitivity);
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
124 }
cf899ee07d1d [gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
125
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
126 void
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
127 gtk_toggle_sensitive_array(GtkWidget *w, GPtrArray *data)
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
128 {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
129 gboolean sensitivity;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
130 gpointer element;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
131 int i;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
132
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
133 for (i=0; i < data->len; i++) {
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
134 element = g_ptr_array_index(data,i);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
135 if (element == NULL)
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
136 continue;
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
137
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
138 sensitivity = GTK_WIDGET_IS_SENSITIVE(element);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
139
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
140 gtk_widget_set_sensitive(element, !sensitivity);
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
141 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
142 }
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
143
8901
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
144 void
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
145 gaim_gtk_toggle_showhide(GtkWidget *widget, GtkWidget *to_toggle)
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
146 {
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
147 if (to_toggle == NULL)
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
148 return;
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
149
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
150 if (GTK_WIDGET_VISIBLE(to_toggle))
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
151 gtk_widget_hide(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
152 else
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
153 gtk_widget_show(to_toggle);
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
154 }
0a8334a14c2d [gaim-migrate @ 9670]
Mark Doliner <markdoliner@pidgin.im>
parents: 8881
diff changeset
155
4687
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
156 void gaim_separator(GtkWidget *menu)
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
157 {
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
158 GtkWidget *menuitem;
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
159
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
160 menuitem = gtk_separator_menu_item_new();
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
161 gtk_widget_show(menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
162 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
91ad36873636 [gaim-migrate @ 4998]
Sean Egan <seanegan@pidgin.im>
parents: 4398
diff changeset
163 }
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
164
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
165 GtkWidget *gaim_new_item(GtkWidget *menu, const char *str)
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
166 {
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
167 GtkWidget *menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
168 GtkWidget *label;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
169
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
170 menuitem = gtk_menu_item_new();
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
171 if (menu)
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
172 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
173 gtk_widget_show(menuitem);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
174
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
175 label = gtk_label_new(str);
6371
e92b66ee5518 [gaim-migrate @ 6876]
Christian Hammond <chipx86@chipx86.com>
parents: 6236
diff changeset
176 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
177 gtk_label_set_pattern(GTK_LABEL(label), "_");
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
178 gtk_container_add(GTK_CONTAINER(menuitem), label);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
179 gtk_widget_show(label);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
180 /* FIXME: Go back and fix this
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
181 gtk_widget_add_accelerator(menuitem, "activate", accel, str[0],
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
182 GDK_MOD1_MASK, GTK_ACCEL_LOCKED);
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
183 */
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
184 gaim_set_accessible_label (menuitem, label);
5162
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
185 return menuitem;
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
186 }
f8293b913629 [gaim-migrate @ 5526]
Mark Doliner <markdoliner@pidgin.im>
parents: 5160
diff changeset
187
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
188 GtkWidget *gaim_new_check_item(GtkWidget *menu, const char *str,
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
189 GtkSignalFunc sf, gpointer data, gboolean checked)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
190 {
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
191 GtkWidget *menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
192 menuitem = gtk_check_menu_item_new_with_mnemonic(str);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
193
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
194 if (menu)
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
195 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
196
7299
4c804d9a52f1 [gaim-migrate @ 7883]
Christian Hammond <chipx86@chipx86.com>
parents: 7118
diff changeset
197 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
198
5906
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
199 if (sf)
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
200 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
201
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
202 gtk_widget_show_all(menuitem);
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
203
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
204 return menuitem;
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
205 }
b9e4aaf4ae51 [gaim-migrate @ 6338]
Nathan Walp <nwalp@pidgin.im>
parents: 5880
diff changeset
206
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
207 GtkWidget *
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
208 gaim_pixbuf_toolbar_button_from_stock(const char *icon)
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
209 {
9706
d5b657fe9cff [gaim-migrate @ 10567]
Mark Doliner <markdoliner@pidgin.im>
parents: 9534
diff changeset
210 GtkWidget *button, *image, *bbox;
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
211
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
212 button = gtk_toggle_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
213 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
214
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
215 bbox = gtk_vbox_new(FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
216
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
217 gtk_container_add (GTK_CONTAINER(button), bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
218
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
219 image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_MENU);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
220 gtk_box_pack_start(GTK_BOX(bbox), image, FALSE, FALSE, 0);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
221
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
222 gtk_widget_show_all(bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
223
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
224 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
225 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
226
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
227 GtkWidget *
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
228 gaim_pixbuf_button_from_stock(const char *text, const char *icon,
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
229 GaimButtonOrientation style)
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
230 {
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
231 GtkWidget *button, *image, *label, *bbox, *ibox, *lbox;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
232
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
233 button = gtk_button_new();
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
234
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
235 if (style == GAIM_BUTTON_HORIZONTAL) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
236 bbox = gtk_hbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
237 ibox = gtk_hbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
238 lbox = gtk_hbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
239 } else {
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
240 bbox = gtk_vbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
241 ibox = gtk_vbox_new(FALSE, 0);
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
242 lbox = gtk_vbox_new(FALSE, 0);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
243 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
244
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
245 gtk_container_add(GTK_CONTAINER(button), bbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
246
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
247 if (icon) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
248 gtk_box_pack_start_defaults(GTK_BOX(bbox), ibox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
249 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
250 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
251 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
252
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
253 if (text) {
9750
dfb5cf70295f [gaim-migrate @ 10617]
Mark Doliner <markdoliner@pidgin.im>
parents: 9749
diff changeset
254 gtk_box_pack_start_defaults(GTK_BOX(bbox), lbox);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
255 label = gtk_label_new(NULL);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
256 gtk_label_set_text_with_mnemonic(GTK_LABEL(label), text);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
257 gtk_label_set_mnemonic_widget(GTK_LABEL(label), button);
9767
c68cfe03deec [gaim-migrate @ 10635]
Mark Doliner <markdoliner@pidgin.im>
parents: 9750
diff changeset
258 gtk_box_pack_start(GTK_BOX(lbox), label, FALSE, TRUE, 0);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
259 gaim_set_accessible_label (button, label);
6372
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
260 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
261
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
262 gtk_widget_show_all(bbox);
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
263
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
264 return button;
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
265 }
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
266
27c3152351ce [gaim-migrate @ 6877]
Christian Hammond <chipx86@chipx86.com>
parents: 6371
diff changeset
267
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
268 GtkWidget *gaim_new_item_from_stock(GtkWidget *menu, const char *str, const char *icon, GtkSignalFunc sf, gpointer data, guint accel_key, guint accel_mods, char *mod)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
269 {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
270 GtkWidget *menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
271 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
272 GtkWidget *hbox;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
273 GtkWidget *label;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
274 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
275 GtkWidget *image;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
276
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
277 if (icon == NULL)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
278 menuitem = gtk_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
279 else
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
280 menuitem = gtk_image_menu_item_new_with_mnemonic(str);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
281
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
282 if (menu)
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
283 gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
284
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
285 if (sf)
5314
56ef6a09fb99 [gaim-migrate @ 5686]
Christian Hammond <chipx86@chipx86.com>
parents: 5162
diff changeset
286 g_signal_connect(G_OBJECT(menuitem), "activate", sf, data);
5160
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
287
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
288 if (icon != NULL) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
289 image = gtk_image_new_from_stock(icon, GTK_ICON_SIZE_MENU);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
290 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
291 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
292 /* FIXME: this isn't right
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
293 if (mod) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
294 label = gtk_label_new(mod);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
295 gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 2);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
296 gtk_widget_show(label);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
297 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
298 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
299 /*
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
300 if (accel_key) {
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
301 gtk_widget_add_accelerator(menuitem, "activate", accel, accel_key,
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
302 accel_mods, GTK_ACCEL_LOCKED);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
303 }
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
304 */
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
305
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
306 gtk_widget_show_all(menuitem);
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
307
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
308 return menuitem;
bcc3e2b2ed56 [gaim-migrate @ 5524]
Mark Doliner <markdoliner@pidgin.im>
parents: 4859
diff changeset
309 }
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
310
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
311 GtkWidget *
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
312 gaim_gtk_make_frame(GtkWidget *parent, const char *title)
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
313 {
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
314 GtkWidget *vbox, *label, *hbox;
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
315 char labeltitle[256];
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
316
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
317 vbox = gtk_vbox_new(FALSE, 6);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
318 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
319 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
320
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
321 label = gtk_label_new(NULL);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
322 g_snprintf(labeltitle, sizeof(labeltitle),
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
323 "<span weight=\"bold\">%s</span>", title);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
324
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
325 gtk_label_set_markup(GTK_LABEL(label), labeltitle);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
326 gtk_misc_set_alignment(GTK_MISC(label), 0, 0);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
327 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
328 gtk_widget_show(label);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
329 gaim_set_accessible_label (vbox, label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
330
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
331 hbox = gtk_hbox_new(FALSE, 6);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
332 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
333 gtk_widget_show(hbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
334
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
335 label = gtk_label_new(" ");
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
336 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
337 gtk_widget_show(label);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
338
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
339 vbox = gtk_vbox_new(FALSE, 6);
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
340 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
341 gtk_widget_show(vbox);
5530
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
342
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
343 return vbox;
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
344 }
ba1ad464b56f [gaim-migrate @ 5930]
Christian Hammond <chipx86@chipx86.com>
parents: 5436
diff changeset
345
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
346 static void
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
347 protocol_menu_cb(GtkWidget *optmenu, GCallback cb)
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
348 {
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
349 GtkWidget *menu;
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
350 GtkWidget *item;
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
351 const char *protocol;
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
352 gpointer user_data;
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
353
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
354 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
355 item = gtk_menu_get_active(GTK_MENU(menu));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
356
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
357 protocol = g_object_get_data(G_OBJECT(item), "protocol");
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
358 user_data = (g_object_get_data(G_OBJECT(optmenu), "user_data"));
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
359
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
360 if (cb != NULL)
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
361 ((void (*)(GtkWidget *, const char *, gpointer))cb)(item, protocol,
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
362 user_data);
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
363 }
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
364
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
365 GtkWidget *
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
366 gaim_gtk_protocol_option_menu_new(const char *id, GCallback cb,
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
367 gpointer user_data)
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
368 {
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
369 GaimPluginProtocolInfo *prpl_info;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
370 GaimPlugin *plugin;
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
371 GtkWidget *hbox;
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
372 GtkWidget *label;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
373 GtkWidget *optmenu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
374 GtkWidget *menu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
375 GtkWidget *item;
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
376 GtkWidget *image;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
377 GdkPixbuf *pixbuf;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
378 GdkPixbuf *scale;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
379 GList *p;
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
380 GtkSizeGroup *sg;
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
381 char *filename;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
382 const char *proto_name;
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
383 char buf[256];
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
384 int i, selected_index = -1;
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
385
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
386 optmenu = gtk_option_menu_new();
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
387 gtk_widget_show(optmenu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
388
5647
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
389 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
7ffa3264c9be [gaim-migrate @ 6061]
Christian Hammond <chipx86@chipx86.com>
parents: 5646
diff changeset
390
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
391 menu = gtk_menu_new();
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
392 gtk_widget_show(menu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
393
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
394 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
395
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
396 for (p = gaim_plugins_get_protocols(), i = 0;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
397 p != NULL;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
398 p = p->next, i++) {
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
399
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
400 plugin = (GaimPlugin *)p->data;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
401 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
402
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
403 /* Create the item. */
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
404 item = gtk_menu_item_new();
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
405
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
406 /* Create the hbox. */
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
407 hbox = gtk_hbox_new(FALSE, 4);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
408 gtk_container_add(GTK_CONTAINER(item), hbox);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
409 gtk_widget_show(hbox);
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
410
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
411 /* Load the image. */
6430
cadc91a19d10 [gaim-migrate @ 6938]
Sean Egan <seanegan@pidgin.im>
parents: 6429
diff changeset
412 proto_name = prpl_info->list_icon(NULL, NULL);
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
413 g_snprintf(buf, sizeof(buf), "%s.png", proto_name);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
414
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
415 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status",
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
416 "default", buf, NULL);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
417 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
418 g_free(filename);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
419
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
420 if (pixbuf != NULL) {
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
421 /* Scale and insert the image */
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
422 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16,
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
423 GDK_INTERP_BILINEAR);
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
424 image = gtk_image_new_from_pixbuf(scale);
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
425
5646
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
426 g_object_unref(G_OBJECT(pixbuf));
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
427 g_object_unref(G_OBJECT(scale));
0aa637549d87 [gaim-migrate @ 6060]
Christian Hammond <chipx86@chipx86.com>
parents: 5644
diff changeset
428 }
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
429 else
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
430 image = gtk_image_new();
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
431
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
432 gtk_size_group_add_widget(sg, image);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
433
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
434 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
435 gtk_widget_show(image);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
436
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
437 /* Create the label. */
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
438 label = gtk_label_new(plugin->info->name);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
439 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
440 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
441 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
442 gtk_widget_show(label);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
443
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
444 g_object_set_data(G_OBJECT(item), "protocol", plugin->info->id);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
445
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
446 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
447 gtk_widget_show(item);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
448 gaim_set_accessible_label (item, label);
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
449
8218
0ff223f56a67 [gaim-migrate @ 8941]
Christian Hammond <chipx86@chipx86.com>
parents: 8215
diff changeset
450 if (id != NULL && !strcmp(plugin->info->id, id))
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
451 selected_index = i;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
452 }
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
453
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
454 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
455
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
456 if (selected_index != -1)
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
457 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), selected_index);
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
458
5688
c185c90d9811 [gaim-migrate @ 6109]
Christian Hammond <chipx86@chipx86.com>
parents: 5676
diff changeset
459 g_signal_connect(G_OBJECT(optmenu), "changed",
5794
ebdbb7dc6658 [gaim-migrate @ 6219]
Christian Hammond <chipx86@chipx86.com>
parents: 5746
diff changeset
460 G_CALLBACK(protocol_menu_cb), cb);
5688
c185c90d9811 [gaim-migrate @ 6109]
Christian Hammond <chipx86@chipx86.com>
parents: 5676
diff changeset
461
5649
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
462 g_object_unref(sg);
e31ce53da5a0 [gaim-migrate @ 6063]
Christian Hammond <chipx86@chipx86.com>
parents: 5647
diff changeset
463
5644
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
464 return optmenu;
bc4c2f9f2bf8 [gaim-migrate @ 6058]
Christian Hammond <chipx86@chipx86.com>
parents: 5641
diff changeset
465 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
466
8940
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
467 GaimAccount *
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
468 gaim_gtk_account_option_menu_get_selected(GtkWidget *optmenu)
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
469 {
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
470 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
471 GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu));
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
472 return g_object_get_data(G_OBJECT(item), "account");
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
473 }
3e22cf150db0 [gaim-migrate @ 9710]
Mark Doliner <markdoliner@pidgin.im>
parents: 8913
diff changeset
474
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
475 static void
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
476 account_menu_cb(GtkWidget *optmenu, GCallback cb)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
477 {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
478 GtkWidget *menu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
479 GtkWidget *item;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
480 GaimAccount *account;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
481 gpointer user_data;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
482
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
483 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
484 item = gtk_menu_get_active(GTK_MENU(menu));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
485
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
486 account = g_object_get_data(G_OBJECT(item), "account");
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
487 user_data = g_object_get_data(G_OBJECT(optmenu), "user_data");
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
488
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
489 if (cb != NULL)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
490 ((void (*)(GtkWidget *, GaimAccount *, gpointer))cb)(item, account,
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
491 user_data);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
492 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
493
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
494 static void
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
495 create_account_menu(GtkWidget *optmenu, GaimAccount *default_account,
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
496 GaimFilterAccountFunc filter_func, gboolean show_all)
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
497 {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
498 GaimAccount *account;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
499 GtkWidget *menu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
500 GtkWidget *item;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
501 GtkWidget *image;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
502 GtkWidget *hbox;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
503 GtkWidget *label;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
504 GdkPixbuf *pixbuf;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
505 GdkPixbuf *scale;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
506 GList *list;
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
507 GList *p;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
508 GtkSizeGroup *sg;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
509 char *filename;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
510 const char *proto_name;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
511 char buf[256];
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
512 int i, selected_index = -1;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
513
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
514 if (show_all)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
515 list = gaim_accounts_get_all();
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
516 else
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
517 list = gaim_connections_get_all();
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
518
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
519 menu = gtk_menu_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
520 gtk_widget_show(menu);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
521
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
522 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
523
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
524 for (p = list, i = 0; p != NULL; p = p->next, i++) {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
525 GaimPluginProtocolInfo *prpl_info = NULL;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
526 GaimPlugin *plugin;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
527
5879
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
528 if (show_all)
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
529 account = (GaimAccount *)p->data;
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
530 else {
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
531 GaimConnection *gc = (GaimConnection *)p->data;
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
532
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
533 account = gaim_connection_get_account(gc);
a2757f3f2dda [gaim-migrate @ 6311]
Christian Hammond <chipx86@chipx86.com>
parents: 5877
diff changeset
534 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
535
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
536 if (filter_func && !filter_func(account)) {
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
537 i--;
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
538 continue;
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
539 }
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
540
7956
21d891f33b89 [gaim-migrate @ 8631]
Nathan Walp <nwalp@pidgin.im>
parents: 7943
diff changeset
541 plugin = gaim_find_prpl(gaim_account_get_protocol_id(account));
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
542
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
543 if (plugin != NULL)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
544 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
545
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
546 /* Create the item. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
547 item = gtk_menu_item_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
548
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
549 /* Create the hbox. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
550 hbox = gtk_hbox_new(FALSE, 4);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
551 gtk_container_add(GTK_CONTAINER(item), hbox);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
552 gtk_widget_show(hbox);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
553
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
554 /* Load the image. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
555 if (prpl_info != NULL) {
6430
cadc91a19d10 [gaim-migrate @ 6938]
Sean Egan <seanegan@pidgin.im>
parents: 6429
diff changeset
556 proto_name = prpl_info->list_icon(account, NULL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
557 g_snprintf(buf, sizeof(buf), "%s.png", proto_name);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
558
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
559 filename = g_build_filename(DATADIR, "pixmaps", "gaim", "status",
8155
b607279bc59b [gaim-migrate @ 8867]
Etan Reisner <deryni@pidgin.im>
parents: 8143
diff changeset
560 "default", buf, NULL);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
561 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
562 g_free(filename);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
563
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
564 if (pixbuf != NULL) {
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
565 /* Scale and insert the image */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
566 scale = gdk_pixbuf_scale_simple(pixbuf, 16, 16,
8155
b607279bc59b [gaim-migrate @ 8867]
Etan Reisner <deryni@pidgin.im>
parents: 8143
diff changeset
567 GDK_INTERP_BILINEAR);
b607279bc59b [gaim-migrate @ 8867]
Etan Reisner <deryni@pidgin.im>
parents: 8143
diff changeset
568
8215
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
569 if (!gaim_account_is_connected(account) && show_all &&
7a9a156d93d9 [gaim-migrate @ 8938]
Tim Ringenbach <marv@pidgin.im>
parents: 8155
diff changeset
570 gaim_connections_get_all())
8155
b607279bc59b [gaim-migrate @ 8867]
Etan Reisner <deryni@pidgin.im>
parents: 8143
diff changeset
571 gdk_pixbuf_saturate_and_pixelate(scale, scale, 0.0, FALSE);
b607279bc59b [gaim-migrate @ 8867]
Etan Reisner <deryni@pidgin.im>
parents: 8143
diff changeset
572
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
573 image = gtk_image_new_from_pixbuf(scale);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
574
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
575 g_object_unref(G_OBJECT(pixbuf));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
576 g_object_unref(G_OBJECT(scale));
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
577 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
578 else
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
579 image = gtk_image_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
580 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
581 else
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
582 image = gtk_image_new();
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
583
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
584 gtk_size_group_add_widget(sg, image);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
585
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
586 gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
587 gtk_widget_show(image);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
588
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
589 g_snprintf(buf, sizeof(buf), "%s (%s)",
9899
30cc3ce7aeb7 [gaim-migrate @ 10790]
Mark Doliner <markdoliner@pidgin.im>
parents: 9791
diff changeset
590 gaim_account_get_username(account),
30cc3ce7aeb7 [gaim-migrate @ 10790]
Mark Doliner <markdoliner@pidgin.im>
parents: 9791
diff changeset
591 gaim_account_get_protocol_name(account));
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
592
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
593 /* Create the label. */
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
594 label = gtk_label_new(buf);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
595 gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
596 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
597 gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
598 gtk_widget_show(label);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
599
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
600 g_object_set_data(G_OBJECT(item), "account", account);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
601
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
602 gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
603 gtk_widget_show(item);
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
604 gaim_set_accessible_label (item, label);
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
605
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
606 if (default_account != NULL && account == default_account)
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
607 selected_index = i;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
608 }
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
609
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
610 g_object_unref(sg);
5880
f5335e81bb6c [gaim-migrate @ 6312]
Christian Hammond <chipx86@chipx86.com>
parents: 5879
diff changeset
611
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
612 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
613
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
614 /* Set the place we should be at. */
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
615 if (selected_index != -1)
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
616 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), selected_index);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
617 }
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
618
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
619 static void
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
620 regenerate_account_menu(GtkWidget *optmenu)
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
621 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
622 GtkWidget *menu;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
623 GtkWidget *item;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
624 gboolean show_all;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
625 GaimAccount *account;
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
626 GaimFilterAccountFunc filter_func;
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
627
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
628 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
629 item = gtk_menu_get_active(GTK_MENU(menu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
630 account = g_object_get_data(G_OBJECT(item), "account");
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
631
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
632 show_all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(optmenu),
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
633 "show_all"));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
634
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
635 filter_func = g_object_get_data(G_OBJECT(optmenu),
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
636 "filter_func");
6646
b9a0b5eb74e6 [gaim-migrate @ 7171]
Christian Hammond <chipx86@chipx86.com>
parents: 6485
diff changeset
637
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
638 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
639
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
640 create_account_menu(optmenu, account, filter_func, show_all);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
641 }
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
642
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
643 static void
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
644 account_menu_sign_on_off_cb(GaimConnection *gc, GtkWidget *optmenu)
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
645 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
646 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
647 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
648
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
649 static void
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
650 account_menu_added_removed_cb(GaimAccount *account, GtkWidget *optmenu)
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
651 {
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
652 regenerate_account_menu(optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
653 }
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
654
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
655 static gboolean
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
656 account_menu_destroyed_cb(GtkWidget *optmenu, GdkEvent *event,
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
657 void *user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
658 {
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
659 gaim_signals_disconnect_by_handle(optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
660
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
661 return FALSE;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
662 }
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
663
9910
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
664 void
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
665 gaim_gtk_account_option_menu_set_selected(GtkWidget *optmenu, GaimAccount *account)
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
666 {
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
667 GtkWidget *menu;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
668 GtkWidget *item;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
669 gboolean show_all;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
670 GaimAccount *curaccount;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
671 GaimFilterAccountFunc filter_func;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
672
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
673 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
674 item = gtk_menu_get_active(GTK_MENU(menu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
675 curaccount = g_object_get_data(G_OBJECT(item), "account");
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
676
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
677 if (account == curaccount)
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
678 return;
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
679
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
680 show_all = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(optmenu),
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
681 "show_all"));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
682
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
683 filter_func = g_object_get_data(G_OBJECT(optmenu),
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
684 "filter_func");
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
685
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
686 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
687
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
688 create_account_menu(optmenu, account, filter_func, show_all);
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
689 }
7b4465b92411 [gaim-migrate @ 10802]
Stu Tomlinson <nosnilmot@pidgin.im>
parents: 9899
diff changeset
690
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
691 GtkWidget *
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
692 gaim_gtk_account_option_menu_new(GaimAccount *default_account,
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
693 gboolean show_all, GCallback cb,
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
694 GaimFilterAccountFunc filter_func,
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
695 gpointer user_data)
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
696 {
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
697 GtkWidget *optmenu;
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
698
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
699 /* Create the option menu */
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
700 optmenu = gtk_option_menu_new();
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
701 gtk_widget_show(optmenu);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
702
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
703 g_signal_connect(G_OBJECT(optmenu), "destroy",
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
704 G_CALLBACK(account_menu_destroyed_cb), NULL);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
705
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
706 /* Register the gaim sign on/off event callbacks. */
6485
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
707 gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
708 optmenu, GAIM_CALLBACK(account_menu_sign_on_off_cb),
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
709 optmenu);
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
710 gaim_signal_connect(gaim_connections_get_handle(), "signed-off",
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
711 optmenu, GAIM_CALLBACK(account_menu_sign_on_off_cb),
3c7ba18e32f1 [gaim-migrate @ 6999]
Christian Hammond <chipx86@chipx86.com>
parents: 6465
diff changeset
712 optmenu);
8134
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
713 gaim_signal_connect(gaim_accounts_get_handle(), "account-added",
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
714 optmenu, GAIM_CALLBACK(account_menu_added_removed_cb),
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
715 optmenu);
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
716 gaim_signal_connect(gaim_accounts_get_handle(), "account-removed",
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
717 optmenu, GAIM_CALLBACK(account_menu_added_removed_cb),
e0b690435403 [gaim-migrate @ 8839]
Nathan Walp <nwalp@pidgin.im>
parents: 8061
diff changeset
718 optmenu);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
719
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
720 /* Set some data. */
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
721 g_object_set_data(G_OBJECT(optmenu), "user_data", user_data);
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
722 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
723 g_object_set_data(G_OBJECT(optmenu), "filter_func",
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
724 filter_func);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
725
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
726 /* Create and set the actual menu. */
8289
234429bac6b5 [gaim-migrate @ 9013]
Christian Hammond <chipx86@chipx86.com>
parents: 8247
diff changeset
727 create_account_menu(optmenu, default_account, filter_func, show_all);
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
728
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
729 /* And now the last callback. */
5877
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
730 g_signal_connect(G_OBJECT(optmenu), "changed",
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
731 G_CALLBACK(account_menu_cb), cb);
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
732
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
733 return optmenu;
37695b88b248 [gaim-migrate @ 6309]
Christian Hammond <chipx86@chipx86.com>
parents: 5872
diff changeset
734 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
735
6391
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
736 gboolean
bd5914d9837c [gaim-migrate @ 6896]
Christian Hammond <chipx86@chipx86.com>
parents: 6372
diff changeset
737 gaim_gtk_check_if_dir(const char *path, GtkFileSelection *filesel)
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
738 {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
739 char *dirname;
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
740
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
741 if (g_file_test(path, G_FILE_TEST_IS_DIR)) {
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
742 /* append a / if needed */
9534
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
743 if (path[strlen(path) - 1] != G_DIR_SEPARATOR) {
a85e66272b09 [gaim-migrate @ 10362]
Mark Doliner <markdoliner@pidgin.im>
parents: 9497
diff changeset
744 dirname = g_strconcat(path, G_DIR_SEPARATOR_S, NULL);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
745 } else {
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
746 dirname = g_strdup(path);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
747 }
5967
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
748 gtk_file_selection_set_filename(filesel, dirname);
df8268ccde45 [gaim-migrate @ 6414]
Mark Doliner <markdoliner@pidgin.im>
parents: 5966
diff changeset
749 g_free(dirname);
5966
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
750 return TRUE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
751 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
752
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
753 return FALSE;
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
754 }
91a208b3e979 [gaim-migrate @ 6413]
Mark Doliner <markdoliner@pidgin.im>
parents: 5959
diff changeset
755
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
756 char *stylize(const gchar *text, int length)
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
757 {
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
758 gchar *buf;
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
759 char *tmp = g_malloc(length);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
760
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
761 buf = g_malloc(length);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
762 g_snprintf(buf, length, "%s", text);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
763
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
764 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_formatting")) {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
765 const char *font;
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
766 GdkColor fg_color, bg_color;
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
767
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
768 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_bold")) {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
769 g_snprintf(tmp, length, "<B>%s</B>", buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
770 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
771 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
772
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
773 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_italic")) {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
774 g_snprintf(tmp, length, "<I>%s</I>", buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
775 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
776 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
777
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
778 if (gaim_prefs_get_bool("/gaim/gtk/conversations/send_underline")) {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
779 g_snprintf(tmp, length, "<U>%s</U>", buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
780 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
781 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
782
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
783 font = gaim_prefs_get_string("/gaim/gtk/conversations/font_face");
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
784
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
785 if (strcmp(font, "") != 0) {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
786 g_snprintf(tmp, length, "<FONT FACE=\"%s\">%s</FONT>", font, buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
787 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
788 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
789
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
790 g_snprintf(tmp, length, "<FONT SIZE=\"%d\">%s</FONT>",
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
791 gaim_prefs_get_int("/gaim/gtk/conversations/font_size"), buf);
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
792 strcpy(buf, tmp);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
793
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
794 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"), "") != 0)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
795 {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
796 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/fgcolor"),
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
797 &fg_color);
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
798
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
799 g_snprintf(tmp, length, "<FONT COLOR=\"#%02X%02X%02X\">%s</FONT>",
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
800 fg_color.red/256, fg_color.green/256,
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
801 fg_color.blue/256, buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
802 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
803 }
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
804
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
805 if(strcmp(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"), "") != 0)
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
806 {
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
807 gdk_color_parse(gaim_prefs_get_string("/gaim/gtk/conversations/bgcolor"),
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
808 &bg_color);
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
809
9025
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
810 g_snprintf(tmp, length, "<BODY BGCOLOR=\"#%02X%02X%02X\">%s</BODY>",
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
811 bg_color.red/256, bg_color.green/256,
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
812 bg_color.blue/256, buf);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
813 strcpy(buf, tmp);
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
814 }
e49a72896270 [gaim-migrate @ 9801]
Luke Schierer <lschiere@pidgin.im>
parents: 8962
diff changeset
815
5943
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
816 }
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
817
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
818 g_free(tmp);
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
819 return buf;
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
820 }
8a052155157a [gaim-migrate @ 6384]
Christian Hammond <chipx86@chipx86.com>
parents: 5906
diff changeset
821
7538
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
822 void
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
823 gaim_gtk_setup_gtkspell(GtkTextView *textview)
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
824 {
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
825 #ifdef USE_GTKSPELL
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
826 GError *error = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
827 char *locale = NULL;
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
828
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
829 g_return_if_fail(textview != NULL);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
830 g_return_if_fail(GTK_IS_TEXT_VIEW(textview));
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
831
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
832 if (gtkspell_new_attach(textview, locale, &error) == NULL && error)
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
833 {
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
834 gaim_debug_warning("gtkspell", "Failed to setup GtkSpell: %s\n",
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
835 error->message);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
836 g_error_free(error);
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
837 }
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
838 #endif /* USE_GTKSPELL */
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
839 }
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
840
b20dbe9222e2 [gaim-migrate @ 8151]
Christian Hammond <chipx86@chipx86.com>
parents: 7420
diff changeset
841 void
7420
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
842 gaim_gtk_save_accels_cb(GtkAccelGroup *accel_group, guint arg1,
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
843 GdkModifierType arg2, GClosure *arg3,
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
844 gpointer data)
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
845 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
846 gaim_debug(GAIM_DEBUG_MISC, "accels", "accel changed, scheduling save.\n");
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
847
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
848 if (!accels_save_timer)
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
849 accels_save_timer = g_timeout_add(5000, gaim_gtk_save_accels, NULL);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
850 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
851
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
852 gboolean
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
853 gaim_gtk_save_accels(gpointer data)
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
854 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
855 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
856
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
857 filename = g_build_filename(gaim_user_dir(), G_DIR_SEPARATOR_S,
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
858 "accels", NULL);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
859 gaim_debug(GAIM_DEBUG_MISC, "accels", "saving accels to %s\n", filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
860 gtk_accel_map_save(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
861 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
862
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
863 accels_save_timer = 0;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
864 return FALSE;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
865 }
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
866
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
867 void
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
868 gaim_gtk_load_accels(gpointer data)
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
869 {
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
870 char *filename = NULL;
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
871
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
872 filename = g_build_filename(gaim_user_dir(), G_DIR_SEPARATOR_S,
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
873 "accels", NULL);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
874 gtk_accel_map_load(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
875 g_free(filename);
af45f3aa95c9 [gaim-migrate @ 8022]
Etan Reisner <deryni@pidgin.im>
parents: 7299
diff changeset
876 }
7712
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
877
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
878 gboolean
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
879 gaim_gtk_parse_x_im_contact(const char *msg, gboolean all_accounts,
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
880 GaimAccount **ret_account, char **ret_protocol,
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
881 char **ret_username, char **ret_alias)
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 char *protocol = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
884 char *username = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
885 char *alias = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
886 char *str;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
887 char *c, *s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
888 gboolean valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
889
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
890 g_return_val_if_fail(msg != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
891 g_return_val_if_fail(ret_protocol != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
892 g_return_val_if_fail(ret_username != NULL, FALSE);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
893
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
894 s = str = g_strdup(msg);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
895
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
896 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
897 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
898 char *key, *value;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
899
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
900 key = s;
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 /* Grab the key */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
903 while (*s != '\r' && *s != '\n' && *s != '\0' && *s != ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
904 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
905
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
906 if (*s == '\r') s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
907
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
908 if (*s == '\n')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
909 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
910 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
911 continue;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
912 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
913
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
914 if (*s != '\0') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
915
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
916 /* Clear past any whitespace */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
917 while (*s != '\0' && *s == ' ')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
918 s++;
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 /* Now let's grab until the end of the line. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
921 value = s;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
922
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
923 while (*s != '\r' && *s != '\n' && *s != '\0')
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
924 s++;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
925
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
926 if (*s == '\r') *s++ = '\0';
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
927 if (*s == '\n') *s++ = '\0';
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 ((c = strchr(key, ':')) != 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 if (!g_ascii_strcasecmp(key, "X-IM-Username:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
932 username = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
933 else if (!g_ascii_strcasecmp(key, "X-IM-Protocol:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
934 protocol = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
935 else if (!g_ascii_strcasecmp(key, "X-IM-Alias:"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
936 alias = g_strdup(value);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
937 }
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
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
940 if (username != NULL && protocol != 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 valid = TRUE;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
943
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
944 *ret_username = username;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
945 *ret_protocol = protocol;
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 (ret_alias != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
948 *ret_alias = alias;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
949
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
950 /* Check for a compatible account. */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
951 if (ret_account != NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
952 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
953 GList *list;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
954 GaimAccount *account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
955 GList *l;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
956 const char *protoname;
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 list = gaim_accounts_get_all();
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
960 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
961 list = gaim_connections_get_all();
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
962
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
963 for (l = list; l != NULL; l = l->next)
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 GaimConnection *gc;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
966 GaimPluginProtocolInfo *prpl_info = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
967 GaimPlugin *plugin;
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 if (all_accounts)
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 account = (GaimAccount *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
972
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
973 plugin = gaim_plugins_find_with_id(
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
974 gaim_account_get_protocol_id(account));
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
975
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
976 if (plugin == NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
977 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
978 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
979
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
980 continue;
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
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
983 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
984 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
985 else
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 gc = (GaimConnection *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
988 account = gaim_connection_get_account(gc);
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 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
991 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
992
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
993 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
994
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
995 if (!strcmp(protoname, protocol))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
996 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
997
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
998 account = NULL;
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
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1001 /* Special case for AIM and ICQ */
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1002 if (account == NULL && (!strcmp(protocol, "aim") ||
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1003 !strcmp(protocol, "icq")))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1004 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1005 for (l = list; l != NULL; l = l->next)
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 GaimConnection *gc;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1008 GaimPluginProtocolInfo *prpl_info = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1009 GaimPlugin *plugin;
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 if (all_accounts)
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 account = (GaimAccount *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1014
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1015 plugin = gaim_plugins_find_with_id(
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1016 gaim_account_get_protocol_id(account));
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1017
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1018 if (plugin == NULL)
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1019 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1020 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1021
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1022 continue;
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
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1025 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1026 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1027 else
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 gc = (GaimConnection *)l->data;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1030 account = gaim_connection_get_account(gc);
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 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1033 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1034
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1035 protoname = prpl_info->list_icon(account, NULL);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1036
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1037 if (!strcmp(protoname, "aim") || !strcmp(protoname, "icq"))
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1038 break;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1039
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1040 account = NULL;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1041 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1042 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1043
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1044 *ret_account = account;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1045 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1046 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1047 else
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1048 {
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1049 valid = FALSE;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1050
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1051 if (username != NULL) g_free(username);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1052 if (protocol != NULL) g_free(protocol);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1053 if (alias != NULL) g_free(alias);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1054 }
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1055
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1056 g_free(str);
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1057
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1058 return valid;
74af9358b808 [gaim-migrate @ 8357]
Christian Hammond <chipx86@chipx86.com>
parents: 7538
diff changeset
1059 }
8137
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1060
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1061 void
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1062 gaim_set_accessible_label (GtkWidget *w, GtkWidget *l)
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1063 {
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1064 AtkObject *acc, *label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1065 AtkObject *rel_obj[1];
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1066 AtkRelationSet *set;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1067 AtkRelation *relation;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1068 const gchar *label_text;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1069 const gchar *existing_name;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1070
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1071 acc = gtk_widget_get_accessible (w);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1072 label = gtk_widget_get_accessible (l);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1073
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1074 /* If this object has no name, set it's name with the label text */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1075 existing_name = atk_object_get_name (acc);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1076 if (!existing_name) {
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1077 label_text = gtk_label_get_text (GTK_LABEL(l));
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1078 if (label_text)
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1079 atk_object_set_name (acc, label_text);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1080 }
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1081
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1082 /* Create the labeled-by relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1083 set = atk_object_ref_relation_set (acc);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1084 rel_obj[0] = label;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1085 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABELLED_BY);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1086 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1087 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1088
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1089 /* Create the label-for relation */
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1090 set = atk_object_ref_relation_set (label);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1091 rel_obj[0] = acc;
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1092 relation = atk_relation_new (rel_obj, 1, ATK_RELATION_LABEL_FOR);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1093 atk_relation_set_add (set, relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1094 g_object_unref (relation);
ca2132ad085e [gaim-migrate @ 8842]
Marc Mulcahy
parents: 8134
diff changeset
1095 }
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1096
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1097 #if GTK_CHECK_VERSION(2,2,0)
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1098 static void
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1099 gaim_gtk_menu_position_func(GtkMenu *menu,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1100 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1101 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1102 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1103 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1104 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1105 GtkWidget *widget;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1106 GtkRequisition requisition;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1107 GdkScreen *screen;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1108 GdkRectangle monitor;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1109 gint monitor_num;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1110 gint space_left, space_right, space_above, space_below;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1111 gint needed_width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1112 gint needed_height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1113 gint xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1114 gint ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1115 gboolean rtl;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1116
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1117 g_return_if_fail(GTK_IS_MENU(menu));
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1118
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1119 widget = GTK_WIDGET(menu);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1120 screen = gtk_widget_get_screen(widget);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1121 xthickness = widget->style->xthickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1122 ythickness = widget->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1123 rtl = (gtk_widget_get_direction(widget) == GTK_TEXT_DIR_RTL);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1124
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1125 /*
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1126 * We need the requisition to figure out the right place to
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1127 * 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
1128 * 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
1129 * the requisition won't have been recomputed yet.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1130 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1131 gtk_widget_size_request (widget, &requisition);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1132
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1133 monitor_num = gdk_screen_get_monitor_at_point (screen, *x, *y);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1134
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1135 push_in = FALSE;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1136
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1137 /*
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1138 * The placement of popup menus horizontally works like this (with
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1139 * RTL in parentheses)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1140 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1141 * - 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
1142 * position the menu there.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1143 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1144 * - Otherwise, if if there is enough room to the left (right) of the
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1145 * mouse cursor, position the menu there.
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 * - Otherwise if the menu is smaller than the monitor, position it
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1148 * 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
1149 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1150 * - 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
1151 * monitor), position it as far left (right) as possible.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1152 *
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1153 * Positioning in the vertical direction is similar: first try below
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1154 * mouse cursor, then above.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1155 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1156 gdk_screen_get_monitor_geometry (screen, monitor_num, &monitor);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1157
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1158 space_left = *x - monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1159 space_right = monitor.x + monitor.width - *x - 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1160 space_above = *y - monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1161 space_below = monitor.y + monitor.height - *y - 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1162
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1163 /* position horizontally */
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 /* the amount of space we need to position the menu. Note the
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1166 * menu is offset "xthickness" pixels
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 needed_width = requisition.width - xthickness;
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 if (needed_width <= space_left ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1171 needed_width <= space_right)
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 if ((rtl && needed_width <= space_left) ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1174 (!rtl && needed_width > space_right))
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 /* position left */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1177 *x = *x + xthickness - requisition.width + 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1178 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1179 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1180 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1181 /* position right */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1182 *x = *x - xthickness;
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
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1185 /* x is clamped on-screen further down */
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 if (requisition.width <= monitor.width)
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 /* 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
1190 * cursor, but smaller than the monitor. Position it on
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1191 * the side that has the most space
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 if (space_left > space_right)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1194 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1195 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1196 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1197 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1198 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1199 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1200 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1201 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1202 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1203 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1204 else /* menu is simply too big for the monitor */
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 if (rtl)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1207 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1208 /* right justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1209 *x = monitor.x + monitor.width - requisition.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1210 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1211 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1212 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1213 /* left justify */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1214 *x = monitor.x;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1215 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1216 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1217
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1218 /* Position vertically. The algorithm is the same as above, but
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1219 * simpler because we don't have to take RTL into account.
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1220 */
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1221 needed_height = requisition.height - ythickness;
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 if (needed_height <= space_above ||
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1224 needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1225 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1226 if (needed_height <= space_below)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1227 *y = *y - ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1228 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1229 *y = *y + ythickness - requisition.height + 1;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1230
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1231 *y = CLAMP (*y, monitor.y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1232 monitor.y + monitor.height - requisition.height);
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 else if (needed_height > space_below && needed_height > space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1235 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1236 if (space_below >= space_above)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1237 *y = monitor.y + monitor.height - requisition.height;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1238 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1239 *y = monitor.y;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1240 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1241 else
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1242 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1243 *y = monitor.y;
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 }
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1246
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1247 #endif
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1248
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1249 void
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1250 gaim_gtk_treeview_popup_menu_position_func(GtkMenu *menu,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1251 gint *x,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1252 gint *y,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1253 gboolean *push_in,
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1254 gpointer data)
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1255 {
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1256 GtkWidget *widget = GTK_WIDGET(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1257 GtkTreeView *tv = GTK_TREE_VIEW(data);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1258 GtkTreePath *path;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1259 GtkTreeViewColumn *col;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1260 GdkRectangle rect;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1261 gint ythickness = GTK_WIDGET(menu)->style->ythickness;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1262
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1263 gdk_window_get_origin (widget->window, x, y);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1264 gtk_tree_view_get_cursor (tv, &path, &col);
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1265 gtk_tree_view_get_cell_area (tv, path, col, &rect);
8218
0ff223f56a67 [gaim-migrate @ 8941]
Christian Hammond <chipx86@chipx86.com>
parents: 8215
diff changeset
1266
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1267 *x += rect.x+rect.width;
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1268 *y += rect.y+rect.height+ythickness;
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1269 #if GTK_CHECK_VERSION(2,2,0)
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1270 gaim_gtk_menu_position_func (menu, x, y, push_in, data);
8247
adc66f6bcaf4 [gaim-migrate @ 8970]
Nathan Walp <nwalp@pidgin.im>
parents: 8218
diff changeset
1271 #endif
8143
ce4b6383777b [gaim-migrate @ 8851]
Nathan Fredrickson <nathan@silverorange.com>
parents: 8137
diff changeset
1272 }

mercurial