Mercurial > pidgin
annotate plugins/contact_priority.c @ 13156:44188ee27d59
[gaim-migrate @ 15519]
Given that the timezone is coming from the locale, it might be non-ASCII. Let's make sure to escape everything. This seems like the cleanest and most portable way of dealing with the filename encoding. As these are logs, I'd like their names to be all ASCII, to avoid problems when moving them between filesystems with different encodings.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Tue, 07 Feb 2006 09:50:06 +0000 |
parents | ae51c59bf819 |
children | 8bda65b88e49 |
rev | line source |
---|---|
7421 | 1 /* |
2 * Contact priority settings plugin. | |
3 * | |
4 * Copyright (C) 2003 Etan Reisner, <deryni9@users.sourceforge.net>. | |
5 * | |
6 * This program is free software; you can redistribute it and/or | |
7 * modify it under the terms of the GNU General Public License as | |
8 * published by the Free Software Foundation; either version 2 of the | |
9 * License, or (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, | |
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 * GNU General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU General Public License | |
17 * along with this program; if not, write to the Free Software | |
18 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
19 */ | |
20 | |
9821 | 21 #include "internal.h" |
22 #include "gtkgaim.h" | |
7421 | 23 #include "gtkplugin.h" |
24 #include "gtkutils.h" | |
25 #include "prefs.h" | |
9954 | 26 #include "version.h" |
7421 | 27 |
28 #define CONTACT_PRIORITY_PLUGIN_ID "gtk-contact-priority" | |
29 | |
30 static void | |
31 select_account(GtkWidget *widget, GaimAccount *account, gpointer data) | |
32 { | |
33 gtk_spin_button_set_value(GTK_SPIN_BUTTON(data), | |
34 (gdouble)gaim_account_get_int(account, "score", 0)); | |
35 } | |
36 | |
37 static void | |
38 account_update(GtkWidget *widget, GtkOptionMenu *optmenu) | |
39 { | |
40 GaimAccount *account = NULL; | |
41 | |
42 account = g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(optmenu)))), "account"); | |
43 gaim_account_set_int(account, "score", gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget))); | |
44 } | |
45 | |
46 static void | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
47 pref_update(GtkWidget *widget, char *pref) |
7421 | 48 { |
49 if (gaim_prefs_get_type(pref) == GAIM_PREF_INT) | |
50 gaim_prefs_set_int(pref, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(widget))); | |
51 if (gaim_prefs_get_type(pref) == GAIM_PREF_BOOLEAN) | |
52 gaim_prefs_set_bool(pref, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))); | |
53 } | |
54 | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
55 static struct GaimContactPriorityStatuses |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
56 { |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
57 const char *id; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
58 const char *description; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
59 } const statuses[] = |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
60 { |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
61 { "idle", N_("Buddy is idle") }, |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
62 { "away", N_("Buddy is away") }, |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
63 { "extended_away", N_("Buddy is \"extended\" away") }, |
12595
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
64 #if 0 |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
65 /* Not used yet. */ |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
66 { "mobile", N_("Buddy is mobile") }, |
3169cd6727ad
[gaim-migrate @ 14925]
Richard Laager <rlaager@wiktel.com>
parents:
12164
diff
changeset
|
67 #endif |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
68 { "offline", N_("Buddy is offline") }, |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
69 { NULL, NULL } |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
70 }; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
71 |
7421 | 72 static GtkWidget * |
73 get_config_frame(GaimPlugin *plugin) | |
74 { | |
75 GtkWidget *ret = NULL, *hbox = NULL, *frame = NULL, *vbox = NULL; | |
76 GtkWidget *label = NULL, *spin = NULL, *check = NULL; | |
77 GtkWidget *optmenu = NULL; | |
78 GtkObject *adj = NULL; | |
79 GtkSizeGroup *sg = NULL; | |
80 GaimAccount *account = NULL; | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
81 int i; |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
82 |
7421 | 83 gboolean last_match = gaim_prefs_get_bool("/core/contact/last_match"); |
84 | |
85 sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); | |
86 | |
87 ret = gtk_vbox_new(FALSE, 18); | |
88 gtk_container_set_border_width(GTK_CONTAINER(ret), 12); | |
89 | |
90 frame = gaim_gtk_make_frame(ret, _("Point values to use when...")); | |
91 | |
92 vbox = gtk_vbox_new(FALSE, 5); | |
93 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
94 | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
95 /* Status Spinboxes */ |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
96 for (i = 0 ; statuses[i].id != NULL && statuses[i].description != NULL ; i++) |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
97 { |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
98 char *pref = g_strconcat("/core/status/scores/", statuses[i].id, NULL); |
7421 | 99 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
100 hbox = gtk_hbox_new(FALSE, 5); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
101 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
102 |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
103 label = gtk_label_new_with_mnemonic(_(statuses[i].description)); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
104 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
105 gtk_size_group_add_widget(sg, label); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
106 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
107 |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
108 adj = gtk_adjustment_new(gaim_prefs_get_int(pref), -500, 500, 1, 1, 1); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
109 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
110 g_signal_connect(G_OBJECT(spin), "value-changed", G_CALLBACK(pref_update), pref); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
111 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); |
7421 | 112 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
113 g_free(pref); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
114 } |
7421 | 115 |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
116 /* Explanation */ |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
117 label = gtk_label_new(NULL); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
118 gtk_label_set_markup(GTK_LABEL(label), _("The buddy with the <i>largest score</i> is the buddy who will have priority in the contact.\n")); |
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
119 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); |
7421 | 120 |
121 /* Last match */ | |
122 hbox = gtk_hbox_new(FALSE, 5); | |
123 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
124 | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
125 check = gtk_check_button_new_with_label(_("Use last buddy when scores are equal")); |
7421 | 126 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), last_match); |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
127 g_signal_connect(G_OBJECT(check), "toggled", G_CALLBACK(pref_update), "/core/contact/last_match"); |
7421 | 128 gtk_box_pack_start(GTK_BOX(hbox), check, FALSE, FALSE, 0); |
129 | |
10729 | 130 frame = gaim_gtk_make_frame(ret, _("Point values to use for account...")); |
7421 | 131 |
132 vbox = gtk_vbox_new(FALSE, 5); | |
133 gtk_container_add(GTK_CONTAINER(frame), vbox); | |
134 | |
135 /* Account */ | |
136 hbox = gtk_hbox_new(FALSE, 5); | |
137 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | |
138 | |
139 /* make this here so I can use it in the option menu callback, we'll | |
140 * actually set it up later */ | |
12164
281ab2ecc08c
[gaim-migrate @ 14465]
Richard Laager <rlaager@wiktel.com>
parents:
10729
diff
changeset
|
141 adj = gtk_adjustment_new(0, -500, 500, 1, 1, 1); |
7421 | 142 spin = gtk_spin_button_new((GtkAdjustment *)adj, 1, 0); |
143 | |
144 optmenu = gaim_gtk_account_option_menu_new(NULL, TRUE, | |
145 G_CALLBACK(select_account), | |
146 NULL, spin); | |
147 gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); | |
148 | |
149 /* this is where we set up the spin button we made above */ | |
150 account = g_object_get_data(G_OBJECT(gtk_menu_get_active(GTK_MENU(gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu))))), | |
151 "account"); | |
152 gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), | |
153 (gdouble)gaim_account_get_int(account, "score", 0)); | |
154 gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(spin), GTK_ADJUSTMENT(adj)); | |
155 g_signal_connect(G_OBJECT(spin), "value-changed", | |
156 G_CALLBACK(account_update), optmenu); | |
157 gtk_box_pack_start(GTK_BOX(hbox), spin, FALSE, FALSE, 0); | |
158 | |
159 gtk_widget_show_all(ret); | |
160 | |
161 return ret; | |
162 } | |
163 | |
164 static GaimGtkPluginUiInfo ui_info = | |
165 { | |
12727
ae51c59bf819
[gaim-migrate @ 15071]
Richard Laager <rlaager@wiktel.com>
parents:
12595
diff
changeset
|
166 get_config_frame, |
ae51c59bf819
[gaim-migrate @ 15071]
Richard Laager <rlaager@wiktel.com>
parents:
12595
diff
changeset
|
167 0 /* page_num (Reserved) */ |
7421 | 168 }; |
169 | |
170 static GaimPluginInfo info = | |
171 { | |
9954 | 172 GAIM_PLUGIN_MAGIC, |
173 GAIM_MAJOR_VERSION, | |
174 GAIM_MINOR_VERSION, | |
7421 | 175 GAIM_PLUGIN_STANDARD, /**< type */ |
176 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ | |
177 0, /**< flags */ | |
178 NULL, /**< dependencies */ | |
179 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
180 | |
181 CONTACT_PRIORITY_PLUGIN_ID, /**< id */ | |
182 N_("Contact Priority"), /**< name */ | |
183 VERSION, /**< version */ | |
184 /**< summary */ | |
185 N_("Allows for controlling the values associated with different buddy states."), | |
186 /**< description */ | |
187 N_("Allows for changing the point values of idle/away/offline states for buddies in contact priority computations."), | |
188 "Etan Reisner <deryni@eden.rutgers.edu>", /**< author */ | |
189 GAIM_WEBSITE, /**< homepage */ | |
190 | |
191 NULL, /**< load */ | |
192 NULL, /**< unload */ | |
193 NULL, /**< destroy */ | |
194 &ui_info, /**< ui_info */ | |
12727
ae51c59bf819
[gaim-migrate @ 15071]
Richard Laager <rlaager@wiktel.com>
parents:
12595
diff
changeset
|
195 NULL, /**< extra_info */ |
ae51c59bf819
[gaim-migrate @ 15071]
Richard Laager <rlaager@wiktel.com>
parents:
12595
diff
changeset
|
196 NULL, /**< prefs_info */ |
ae51c59bf819
[gaim-migrate @ 15071]
Richard Laager <rlaager@wiktel.com>
parents:
12595
diff
changeset
|
197 NULL /**< actions */ |
7421 | 198 }; |
199 | |
200 static void | |
201 init_plugin(GaimPlugin *plugin) | |
202 { | |
203 } | |
204 | |
205 GAIM_INIT_PLUGIN(contactpriority, init_plugin, info) |