| 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) |