Mercurial > pidgin
annotate plugins/contact_priority.c @ 12649:773f694e83bf
[gaim-migrate @ 14987]
I'm pretty sure this is what valgrind was just telling me was leaking in
creating tooltips, it certainly doesn't seem to affect showing tooltips, but
it's late and I'm tired so if I'm wrong that's my excuse.
committer: Tailor Script <tailor@pidgin.im>
| author | Etan Reisner <pidgin@unreliablesource.net> |
|---|---|
| date | Sat, 24 Dec 2005 08:10:32 +0000 |
| parents | 3169cd6727ad |
| children | ae51c59bf819 |
| 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 { | |
| 166 get_config_frame | |
| 167 }; | |
| 168 | |
| 169 static GaimPluginInfo info = | |
| 170 { | |
| 9954 | 171 GAIM_PLUGIN_MAGIC, |
| 172 GAIM_MAJOR_VERSION, | |
| 173 GAIM_MINOR_VERSION, | |
| 7421 | 174 GAIM_PLUGIN_STANDARD, /**< type */ |
| 175 GAIM_GTK_PLUGIN_TYPE, /**< ui_requirement */ | |
| 176 0, /**< flags */ | |
| 177 NULL, /**< dependencies */ | |
| 178 GAIM_PRIORITY_DEFAULT, /**< priority */ | |
| 179 | |
| 180 CONTACT_PRIORITY_PLUGIN_ID, /**< id */ | |
| 181 N_("Contact Priority"), /**< name */ | |
| 182 VERSION, /**< version */ | |
| 183 /**< summary */ | |
| 184 N_("Allows for controlling the values associated with different buddy states."), | |
| 185 /**< description */ | |
| 186 N_("Allows for changing the point values of idle/away/offline states for buddies in contact priority computations."), | |
| 187 "Etan Reisner <deryni@eden.rutgers.edu>", /**< author */ | |
| 188 GAIM_WEBSITE, /**< homepage */ | |
| 189 | |
| 190 NULL, /**< load */ | |
| 191 NULL, /**< unload */ | |
| 192 NULL, /**< destroy */ | |
| 193 &ui_info, /**< ui_info */ | |
| 194 NULL /**< extra_info */ | |
| 195 }; | |
| 196 | |
| 197 static void | |
| 198 init_plugin(GaimPlugin *plugin) | |
| 199 { | |
| 200 } | |
| 201 | |
| 202 GAIM_INIT_PLUGIN(contactpriority, init_plugin, info) |
