Mercurial > pidgin.yaz
comparison src/gtkaccount.c @ 5826:bd0d0e89cac3
[gaim-migrate @ 6256]
You can once again set your buddy icon. Of course, you* haven't been using
CVS, so you've always been able to set your buddy icon.
* Gaim developers not applicable
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Tue, 10 Jun 2003 01:09:26 +0000 |
parents | 1ba7dbd50d85 |
children | 8f5ccf9e590a |
comparison
equal
deleted
inserted
replaced
5825:729e688fd2e7 | 5826:bd0d0e89cac3 |
---|---|
19 * You should have received a copy of the GNU General Public License | 19 * You should have received a copy of the GNU General Public License |
20 * along with this program; if not, write to the Free Software | 20 * along with this program; if not, write to the Free Software |
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
22 */ | 22 */ |
23 | 23 |
24 #include <sys/types.h> | |
25 #include <sys/stat.h> | |
26 #include <unistd.h> | |
27 | |
24 #include <gtk/gtk.h> | 28 #include <gtk/gtk.h> |
25 | 29 |
26 #include "gtkaccount.h" | 30 #include "gtkaccount.h" |
27 #include "account.h" | 31 #include "account.h" |
28 #include "accountopt.h" | 32 #include "accountopt.h" |
111 /* User Options */ | 115 /* User Options */ |
112 GtkWidget *user_frame; | 116 GtkWidget *user_frame; |
113 GtkWidget *new_mail_check; | 117 GtkWidget *new_mail_check; |
114 GtkWidget *buddy_icon_hbox; | 118 GtkWidget *buddy_icon_hbox; |
115 GtkWidget *buddy_icon_entry; | 119 GtkWidget *buddy_icon_entry; |
116 | 120 GtkWidget *buddy_icon_filesel; |
121 GtkWidget *buddy_icon_preview; | |
122 GtkWidget *buddy_icon_text; | |
123 | |
117 /* Protocol Options */ | 124 /* Protocol Options */ |
118 GtkWidget *protocol_frame; | 125 GtkWidget *protocol_frame; |
119 GtkWidget *register_check; | 126 GtkWidget *register_check; |
120 | 127 |
121 /* Proxy Options */ | 128 /* Proxy Options */ |
196 { | 203 { |
197 if (dialog->ok_button == NULL) | 204 if (dialog->ok_button == NULL) |
198 return; | 205 return; |
199 | 206 |
200 gtk_widget_set_sensitive(dialog->ok_button, | 207 gtk_widget_set_sensitive(dialog->ok_button, |
201 *gtk_entry_get_text(entry) != '\0'); | 208 *gtk_entry_get_text(entry) != '\0'); |
209 } | |
210 | |
211 static void buddy_icon_filesel_delete_cb (GtkWidget *w, AccountPrefsDialog *dialog) | |
212 { | |
213 gtk_widget_destroy(dialog->buddy_icon_filesel); | |
214 dialog->buddy_icon_filesel = NULL; | |
215 } | |
216 | |
217 static void buddy_icon_filesel_choose (GtkWidget *w, AccountPrefsDialog *dialog) | |
218 { | |
219 const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)); | |
220 if (dialog->account) | |
221 gaim_account_set_buddy_icon(dialog->account, filename); | |
222 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), filename); | |
223 gtk_widget_destroy(dialog->buddy_icon_filesel); | |
224 } | |
225 | |
226 static void buddy_icon_preview_change_cb(GtkTreeSelection *sel, AccountPrefsDialog *dialog) | |
227 { | |
228 GdkPixbuf *pixbuf, *scale; | |
229 int height, width; | |
230 char *basename, *markup, *size; | |
231 struct stat st; | |
232 | |
233 const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)); | |
234 if (!filename || stat(filename, &st)) | |
235 return; | |
236 | |
237 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); | |
238 if (!pixbuf) { | |
239 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->buddy_icon_preview), NULL); | |
240 gtk_label_set_markup(GTK_LABEL(dialog->buddy_icon_text), ""); | |
241 return; | |
242 } | |
243 | |
244 width = gdk_pixbuf_get_width(pixbuf); | |
245 height = gdk_pixbuf_get_height(pixbuf); | |
246 basename = g_path_get_basename(filename); | |
247 size = gaim_get_size_string(st.st_size); | |
248 markup = g_strdup_printf(_("<b>File:</b> %s\n<b>File size:</b> %s\n<b>Image size:</b> %dx%d"), | |
249 basename, size, width, height); | |
250 scale = gdk_pixbuf_scale_simple(pixbuf, width * 50 / height, 50, GDK_INTERP_BILINEAR); | |
251 gtk_image_set_from_pixbuf(GTK_IMAGE(dialog->buddy_icon_preview), scale); | |
252 gtk_label_set_markup(GTK_LABEL(dialog->buddy_icon_text), markup); | |
253 | |
254 g_object_unref(G_OBJECT(pixbuf)); | |
255 g_object_unref(G_OBJECT(scale)); | |
256 g_free(basename); | |
257 g_free(size); | |
258 } | |
259 | |
260 static void buddy_icon_select_cb(GtkWidget *button, AccountPrefsDialog *dialog) | |
261 { | |
262 GtkWidget *hbox; | |
263 GtkWidget *tv; | |
264 GtkTreeSelection *sel; | |
265 | |
266 if (dialog->buddy_icon_filesel) { | |
267 gdk_window_show(GDK_WINDOW(dialog->buddy_icon_filesel)); | |
268 return; | |
269 } | |
270 | |
271 dialog->buddy_icon_filesel = gtk_file_selection_new(_("Buddy Icon")); | |
272 dialog->buddy_icon_preview = gtk_image_new(); | |
273 dialog->buddy_icon_text = gtk_label_new(NULL); | |
274 gtk_widget_set_size_request(GTK_WIDGET(dialog->buddy_icon_preview), -1, 50); | |
275 hbox = gtk_hbox_new(FALSE, 6); | |
276 gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->main_vbox), hbox, | |
277 FALSE, FALSE, 0); | |
278 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_preview, FALSE, FALSE, 0); | |
279 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_text, FALSE, FALSE, 0); | |
280 | |
281 tv = GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->file_list; | |
282 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); | |
283 g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(buddy_icon_preview_change_cb), dialog); | |
284 | |
285 g_signal_connect(G_OBJECT(dialog->buddy_icon_filesel), "delete-event", G_CALLBACK(buddy_icon_filesel_delete_cb), dialog); | |
286 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->cancel_button), "clicked", | |
287 G_CALLBACK(buddy_icon_filesel_delete_cb), dialog); | |
288 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->ok_button), "clicked", G_CALLBACK(buddy_icon_filesel_choose), | |
289 dialog); | |
290 | |
291 gtk_widget_show_all(dialog->buddy_icon_filesel); | |
292 if (dialog->account) { | |
293 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel), | |
294 gaim_account_get_buddy_icon(dialog->account)); | |
295 buddy_icon_preview_change_cb(NULL, dialog); | |
296 } | |
297 | |
298 } | |
299 | |
300 static void buddy_icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) | |
301 { | |
302 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), ""); | |
303 if (dialog->account) | |
304 gaim_account_set_buddy_icon(dialog->account, NULL); | |
202 } | 305 } |
203 | 306 |
204 static void | 307 static void |
205 add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) | 308 add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) |
206 { | 309 { |
234 | 337 |
235 add_pref_box(dialog, vbox, _("Protocol:"), dialog->protocol_menu); | 338 add_pref_box(dialog, vbox, _("Protocol:"), dialog->protocol_menu); |
236 | 339 |
237 /* Screen Name */ | 340 /* Screen Name */ |
238 dialog->screenname_entry = gtk_entry_new(); | 341 dialog->screenname_entry = gtk_entry_new(); |
239 | 342 |
240 add_pref_box(dialog, vbox, _("Screenname:"), dialog->screenname_entry); | 343 add_pref_box(dialog, vbox, _("Screenname:"), dialog->screenname_entry); |
241 | 344 |
242 g_signal_connect(G_OBJECT(dialog->screenname_entry), "changed", | 345 g_signal_connect(G_OBJECT(dialog->screenname_entry), "changed", |
243 G_CALLBACK(screenname_changed_cb), dialog); | 346 G_CALLBACK(screenname_changed_cb), dialog); |
244 | 347 |
245 /* Do the user split thang */ | 348 /* Do the user split thang */ |
246 if (dialog->plugin == NULL) /* Yeah right. */ | 349 if (dialog->plugin == NULL) /* Yeah right. */ |
247 user_splits = NULL; | 350 user_splits = NULL; |
248 else | 351 else |
398 label = gtk_label_new(_("Buddy icon file:")); | 501 label = gtk_label_new(_("Buddy icon file:")); |
399 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 502 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
400 gtk_widget_show(label); | 503 gtk_widget_show(label); |
401 | 504 |
402 dialog->buddy_icon_entry = gtk_entry_new(); | 505 dialog->buddy_icon_entry = gtk_entry_new(); |
506 gtk_entry_set_editable(GTK_ENTRY(dialog->buddy_icon_entry), FALSE); | |
403 gtk_box_pack_start(GTK_BOX(hbox), dialog->buddy_icon_entry, TRUE, TRUE, 0); | 507 gtk_box_pack_start(GTK_BOX(hbox), dialog->buddy_icon_entry, TRUE, TRUE, 0); |
404 gtk_widget_show(dialog->buddy_icon_entry); | 508 gtk_widget_show(dialog->buddy_icon_entry); |
405 | 509 |
406 button = gtk_button_new_with_label(_("Browse")); | 510 button = gtk_button_new_with_mnemonic(_("_Browse")); |
407 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 511 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
512 g_signal_connect(G_OBJECT(button), "clicked", | |
513 G_CALLBACK(buddy_icon_select_cb), dialog); | |
408 gtk_widget_show(button); | 514 gtk_widget_show(button); |
409 | 515 |
410 button = gtk_button_new_with_label(_("Reset")); | 516 button = gtk_button_new_with_mnemonic(_("_Reset")); |
517 g_signal_connect(G_OBJECT(button), "clicked", | |
518 G_CALLBACK(buddy_icon_reset_cb), dialog); | |
411 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); | 519 gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); |
412 gtk_widget_show(button); | 520 gtk_widget_show(button); |
413 | 521 |
414 if (dialog->prpl_info != NULL) { | 522 if (dialog->prpl_info != NULL) { |
415 if (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK)) | 523 if (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK)) |
771 g_list_free(dialog->user_split_entries); | 879 g_list_free(dialog->user_split_entries); |
772 | 880 |
773 if (dialog->protocol_opt_entries != NULL) | 881 if (dialog->protocol_opt_entries != NULL) |
774 g_list_free(dialog->protocol_opt_entries); | 882 g_list_free(dialog->protocol_opt_entries); |
775 | 883 |
884 if (dialog->buddy_icon_filesel) | |
885 gtk_widget_destroy(dialog->buddy_icon_filesel); | |
886 | |
776 g_free(dialog); | 887 g_free(dialog); |
777 } | 888 } |
778 | 889 |
779 static void | 890 static void |
780 cancel_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) | 891 cancel_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) |