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)