| 208 *gtk_entry_get_text(entry) != '\0'); |
208 *gtk_entry_get_text(entry) != '\0'); |
| 209 } |
209 } |
| 210 |
210 |
| 211 static void buddy_icon_filesel_delete_cb (GtkWidget *w, AccountPrefsDialog *dialog) |
211 static void buddy_icon_filesel_delete_cb (GtkWidget *w, AccountPrefsDialog *dialog) |
| 212 { |
212 { |
| |
213 if (dialog->buddy_icon_filesel != NULL) |
| |
214 gtk_widget_destroy(dialog->buddy_icon_filesel); |
| 213 dialog->buddy_icon_filesel = NULL; |
215 dialog->buddy_icon_filesel = NULL; |
| 214 } |
216 } |
| 215 |
217 |
| 216 static void buddy_icon_filesel_choose (GtkWidget *w, AccountPrefsDialog *dialog) |
218 static void buddy_icon_filesel_choose (GtkWidget *w, AccountPrefsDialog *dialog) |
| 217 { |
219 { |
| 218 const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)); |
220 const char *filename = gtk_file_selection_get_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)); |
| |
221 |
| 219 if (dialog->account) |
222 if (dialog->account) |
| 220 gaim_account_set_buddy_icon(dialog->account, filename); |
223 gaim_account_set_buddy_icon(dialog->account, filename); |
| 221 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), filename); |
224 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), filename); |
| 222 gtk_widget_destroy(dialog->buddy_icon_filesel); |
225 gtk_widget_destroy(dialog->buddy_icon_filesel); |
| 223 } |
226 } |
| 252 |
255 |
| 253 g_object_unref(G_OBJECT(pixbuf)); |
256 g_object_unref(G_OBJECT(pixbuf)); |
| 254 g_object_unref(G_OBJECT(scale)); |
257 g_object_unref(G_OBJECT(scale)); |
| 255 g_free(basename); |
258 g_free(basename); |
| 256 g_free(size); |
259 g_free(size); |
| |
260 g_free(markup); |
| 257 } |
261 } |
| 258 |
262 |
| 259 static void buddy_icon_select_cb(GtkWidget *button, AccountPrefsDialog *dialog) |
263 static void buddy_icon_select_cb(GtkWidget *button, AccountPrefsDialog *dialog) |
| 260 { |
264 { |
| 261 GtkWidget *hbox; |
265 GtkWidget *hbox; |
| 262 GtkWidget *tv; |
266 GtkWidget *tv; |
| 263 GtkTreeSelection *sel; |
267 GtkTreeSelection *sel; |
| 264 |
268 |
| 265 if (dialog->buddy_icon_filesel) { |
269 if (dialog->buddy_icon_filesel) { |
| 266 gdk_window_show(GDK_WINDOW(dialog->buddy_icon_filesel)); |
270 gtk_widget_show(GTK_WIDGET(dialog->buddy_icon_filesel)); |
| |
271 gdk_window_raise(GDK_WINDOW(dialog->buddy_icon_filesel->window)); |
| 267 return; |
272 return; |
| 268 } |
273 } |
| 269 |
274 |
| 270 dialog->buddy_icon_filesel = gtk_file_selection_new(_("Buddy Icon")); |
275 dialog->buddy_icon_filesel = gtk_file_selection_new(_("Buddy Icon")); |
| 271 dialog->buddy_icon_preview = gtk_image_new(); |
276 dialog->buddy_icon_preview = gtk_image_new(); |
| 272 dialog->buddy_icon_text = gtk_label_new(NULL); |
277 dialog->buddy_icon_text = gtk_label_new(NULL); |
| 273 gtk_widget_set_size_request(GTK_WIDGET(dialog->buddy_icon_preview), -1, 50); |
278 gtk_widget_set_size_request(GTK_WIDGET(dialog->buddy_icon_preview), -1, 50); |
| 274 hbox = gtk_hbox_new(FALSE, 6); |
279 hbox = gtk_hbox_new(FALSE, 6); |
| 275 gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->main_vbox), hbox, |
280 gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->main_vbox), hbox, |
| 276 FALSE, FALSE, 0); |
281 FALSE, FALSE, 0); |
| 277 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_preview, FALSE, FALSE, 0); |
282 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_preview, FALSE, FALSE, 0); |
| 278 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_text, FALSE, FALSE, 0); |
283 gtk_box_pack_end(GTK_BOX(hbox), dialog->buddy_icon_text, FALSE, FALSE, 0); |
| 279 |
284 |
| 280 tv = GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->file_list; |
285 tv = GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->file_list; |
| 281 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); |
286 sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)); |
| 282 g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(buddy_icon_preview_change_cb), dialog); |
287 g_signal_connect(G_OBJECT(sel), "changed", G_CALLBACK(buddy_icon_preview_change_cb), dialog); |
| 283 |
288 |
| 284 g_signal_connect(G_OBJECT(dialog->buddy_icon_filesel), "delete_event", G_CALLBACK(buddy_icon_filesel_delete_cb), dialog); |
289 g_signal_connect(G_OBJECT(dialog->buddy_icon_filesel), "destroy", G_CALLBACK(buddy_icon_filesel_delete_cb), dialog); |
| 285 g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->cancel_button), "clicked", |
290 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->cancel_button), "clicked", |
| 286 G_CALLBACK(gtk_widget_destroy), dialog->buddy_icon_filesel); |
291 G_CALLBACK(buddy_icon_filesel_delete_cb), dialog); |
| 287 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->ok_button), "clicked", G_CALLBACK(buddy_icon_filesel_choose), |
292 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(dialog->buddy_icon_filesel)->ok_button), "clicked", G_CALLBACK(buddy_icon_filesel_choose), |
| 288 dialog); |
293 dialog); |
| 289 |
294 |
| 290 gtk_widget_show_all(dialog->buddy_icon_filesel); |
295 gtk_widget_show_all(GTK_WIDGET(dialog->buddy_icon_filesel)); |
| 291 if (dialog->account) { |
296 if (dialog->account && (gaim_account_get_buddy_icon(dialog->account) != NULL)) { |
| 292 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel), |
297 gtk_file_selection_set_filename(GTK_FILE_SELECTION(dialog->buddy_icon_filesel), |
| 293 gaim_account_get_buddy_icon(dialog->account)); |
298 gaim_account_get_buddy_icon(dialog->account)); |
| 294 buddy_icon_preview_change_cb(NULL, dialog); |
299 buddy_icon_preview_change_cb(NULL, dialog); |
| 295 } |
300 } |
| 296 |
301 |
| 297 } |
302 } |
| 298 |
303 |
| 299 static void buddy_icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) |
304 static void buddy_icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) |
| 300 { |
305 { |
| 301 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), ""); |
306 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), ""); |