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)