Mercurial > pidgin
comparison src/gtkrequest.c @ 8843:1bbe99a07e36
[gaim-migrate @ 9610]
Pekka Riikonen has provided us with a nice file selector request API.
This is it.
committer: Tailor Script <tailor@pidgin.im>
author | Ethan Blanton <elb@pidgin.im> |
---|---|
date | Fri, 30 Apr 2004 03:00:05 +0000 |
parents | 5a2b5e4abf3a |
children | 56e6b9bdcdbc |
comparison
equal
deleted
inserted
replaced
8842:ad3633f92f91 | 8843:1bbe99a07e36 |
---|---|
1356 gaim_request_fields_destroy(data->u.multifield.fields); | 1356 gaim_request_fields_destroy(data->u.multifield.fields); |
1357 | 1357 |
1358 g_free(data); | 1358 g_free(data); |
1359 } | 1359 } |
1360 | 1360 |
1361 static void | |
1362 file_ok_cb(GtkWidget *button, GaimGtkRequestData *data) | |
1363 { | |
1364 const char *name; | |
1365 | |
1366 if (!GTK_WIDGET_HAS_FOCUS(button)) | |
1367 gtk_widget_grab_focus(button); | |
1368 | |
1369 if (data->cbs[0] != NULL) { | |
1370 name = gtk_file_selection_get_filename(GTK_FILE_SELECTION(data->dialog)); | |
1371 if (gaim_gtk_check_if_dir(name, GTK_FILE_SELECTION(data->dialog))) | |
1372 name = NULL; | |
1373 | |
1374 ((GaimRequestInputCb)data->cbs[0])(data->user_data, name); | |
1375 } | |
1376 | |
1377 gaim_request_close(GAIM_REQUEST_INPUT, data); | |
1378 } | |
1379 | |
1380 static void | |
1381 file_cancel_cb(GtkWidget *button, GaimGtkRequestData *data) | |
1382 { | |
1383 if (data->cbs[1] != NULL) | |
1384 ((GaimRequestInputCb)data->cbs[1])(data->user_data, NULL); | |
1385 | |
1386 gaim_request_close(GAIM_REQUEST_INPUT, data); | |
1387 } | |
1388 | |
1389 static void * | |
1390 gaim_gtk_request_file(const char *title, const char *filename, | |
1391 GCallback ok_cb, GCallback cancel_cb, | |
1392 void *user_data) | |
1393 { | |
1394 GaimGtkRequestData *data; | |
1395 GtkWidget *filesel; | |
1396 char *cur_dir, *init_str, tmp[512]; | |
1397 | |
1398 data = g_new0(GaimGtkRequestData, 1); | |
1399 data->type = GAIM_REQUEST_INPUT; | |
1400 data->user_data = user_data; | |
1401 data->cb_count = 2; | |
1402 data->cbs = g_new0(GCallback, 2); | |
1403 data->cbs[0] = ok_cb; | |
1404 data->cbs[1] = cancel_cb; | |
1405 | |
1406 filesel = gtk_file_selection_new(title ? title : _("")); | |
1407 cur_dir = g_get_current_dir(); | |
1408 g_snprintf(tmp, sizeof(tmp), "%s" G_DIR_SEPARATOR_S, cur_dir); | |
1409 init_str = g_build_filename(tmp, filename, NULL); | |
1410 gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), init_str); | |
1411 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)), | |
1412 "delete_event", G_CALLBACK(file_cancel_cb), data); | |
1413 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), | |
1414 "clicked", G_CALLBACK(file_cancel_cb), data); | |
1415 g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), | |
1416 "clicked", G_CALLBACK(file_ok_cb), data); | |
1417 gtk_widget_show(filesel); | |
1418 g_free(cur_dir); | |
1419 g_free(init_str); | |
1420 | |
1421 data->dialog = filesel; | |
1422 return (void *)data; | |
1423 } | |
1424 | |
1361 static GaimRequestUiOps ops = | 1425 static GaimRequestUiOps ops = |
1362 { | 1426 { |
1363 gaim_gtk_request_input, | 1427 gaim_gtk_request_input, |
1364 gaim_gtk_request_choice, | 1428 gaim_gtk_request_choice, |
1365 gaim_gtk_request_action, | 1429 gaim_gtk_request_action, |
1366 gaim_gtk_request_fields, | 1430 gaim_gtk_request_fields, |
1431 gaim_gtk_request_file, | |
1367 gaim_gtk_close_request | 1432 gaim_gtk_close_request |
1368 }; | 1433 }; |
1369 | 1434 |
1370 GaimRequestUiOps * | 1435 GaimRequestUiOps * |
1371 gaim_gtk_request_get_ui_ops(void) | 1436 gaim_gtk_request_get_ui_ops(void) |