コード例 #1
0
ファイル: glspi_dlg.c プロジェクト: floverdevel/geany-plugins
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;
}
コード例 #2
0
ファイル: empathy-ui-utils.c プロジェクト: Dhinihan/empathy
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);
}