static gchar *file_dlg(lua_State* L, gboolean save, const gchar *path, const gchar *mask, const gchar *name) { gchar *rv=NULL; gchar *fullname = NULL; GtkWidget*dlg=NULL; #if NEED_OVERWRITE_PROMPT gboolean accepted=FALSE; #endif gint resp=GTK_RESPONSE_CANCEL; if (save) { dlg=gtk_file_chooser_dialog_new(_("Save file"), GTK_WINDOW(main_widgets->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); #if NEED_OVERWRITE_PROMPT gtk_signal_connect(GTK_OBJECT(dlg),"response",G_CALLBACK(on_file_dlg_response),&accepted); #else gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dlg), TRUE); #endif } else { dlg=gtk_file_chooser_dialog_new(_("Open file"), GTK_WINDOW(main_widgets->window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); } if (name && *name) { if (g_path_is_absolute(name)) { fullname=g_strdup(name); } else if (path) {fullname=g_build_filename(path,name,NULL);} gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dlg), fullname); if (save) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dlg), name); } if (path && *path) { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dlg), path); } if (!create_file_filter(L, GTK_FILE_CHOOSER(dlg), mask)) { lua_pushfstring(L, _("Error in module \"%s\" at function pickfile():\n" "failed to parse filter string at argument #3.\n"), LUA_MODULE_NAME); lua_error(L); return NULL; } #if NEED_OVERWRITE_PROMPT glspi_pause_timer(TRUE,L); while (!accepted) { resp=gtk_dialog_run(GTK_DIALOG(dlg)); if (!save) { accepted=TRUE; } } glspi_pause_timer(FALSE,L); #else resp=glspi_dialog_run(GTK_DIALOG(dlg)); #endif if (resp == GTK_RESPONSE_ACCEPT) { rv=gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg)); } gtk_widget_destroy(dlg); if (fullname) {g_free(fullname);} return rv; }
void empathy_send_file_with_file_chooser (EmpathyContact *contact) { GtkWidget *widget; GtkWidget *button; g_return_if_fail (EMPATHY_IS_CONTACT (contact)); DEBUG ("Creating selection file chooser"); widget = gtk_file_chooser_dialog_new (_("Select a file"), NULL, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); /* send button */ button = gtk_button_new_with_mnemonic (_("_Send")); gtk_button_set_image (GTK_BUTTON (button), gtk_image_new_from_icon_name (EMPATHY_IMAGE_DOCUMENT_SEND, GTK_ICON_SIZE_BUTTON)); gtk_widget_show (button); gtk_dialog_add_action_widget (GTK_DIALOG (widget), button, GTK_RESPONSE_OK); gtk_widget_set_can_default (button, TRUE); gtk_dialog_set_default_response (GTK_DIALOG (widget), GTK_RESPONSE_OK); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (widget), FALSE); gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (widget), g_get_home_dir ()); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (widget), create_file_filter ()); g_signal_connect (widget, "response", G_CALLBACK (file_manager_send_file_response_cb), g_object_ref (contact)); gtk_widget_show (widget); }