Пример #1
0
static void
clipboard_get_cb (GtkClipboard     *clipboard,
		  GtkSelectionData *selection_data,
		  guint             info,
		  gpointer          user_data_or_owner)
{
	ClipboardData *clipboard_data = user_data_or_owner;
	GdkAtom        targets[1];
	int            n_targets;

	targets[0] = gtk_selection_data_get_target (selection_data);
	n_targets = 1;

	if (gtk_targets_include_uri (targets, n_targets)) {
		gtk_selection_data_set_uris (selection_data, clipboard_data->uris);
	}
	else if (gtk_targets_include_text (targets, n_targets)) {
		char  *str;
		gsize  len;

		str = clipboard_data_convert_to_text (clipboard_data, FALSE, &len);
		gtk_selection_data_set_text (selection_data, str, len);
		g_free (str);
	}
	else if (gtk_selection_data_get_target (selection_data) == GNOME_COPIED_FILES) {
		char  *str;
		gsize  len;

		str = clipboard_data_convert_to_text (clipboard_data, TRUE, &len);
		gtk_selection_data_set (selection_data, GNOME_COPIED_FILES, 8, (guchar *) str, len);
		g_free (str);
	}
}
Пример #2
0
Файл: dnd.c Проект: polarcat/yad
static void
drop_data_cb (GtkWidget *w, GdkDragContext *dc, gint x, gint y,
	      GtkSelectionData *sel, guint info, guint t, gpointer data)
{
  GdkAtom stgt;

  stgt = gtk_selection_data_get_target (sel);

  if (gtk_targets_include_uri (&stgt, 1))
    {
      gchar **uris;
      gint i = 0;

      uris = gtk_selection_data_get_uris (sel);
      if (!uris)
        return;

      while (uris[i])
	{
	  gchar *dstr = g_uri_unescape_string (uris[i], NULL);
	  if (options.common_data.command)
	    {
	      gchar *action = g_strdup_printf ("%s '%s'", options.common_data.command, dstr);
	      g_spawn_command_line_async (action, NULL);
	      g_free (action);
	    }
	  else
	    {
	      g_printf ("%s\n", dstr);
	      fflush (stdout);
	    }
	  g_free (dstr);
	  i++;
	}
      g_strfreev (uris);
    }
  else if (gtk_targets_include_text (&stgt, 1))
    {
      guchar *str = gtk_selection_data_get_text (sel);
      if (str)
	{
	  gchar *dstr = g_uri_unescape_string ((const gchar *) str, NULL);
	  if (options.common_data.command)
	    {
	      gchar *action = g_strdup_printf ("%s '%s'", options.common_data.command, dstr);
	      g_spawn_command_line_async (action, NULL);
	      g_free (action);
	    }
	  else
	    {
	      g_printf ("%s\n", dstr);
	      fflush (stdout);
	    }
	  g_free (dstr);
	  g_free(str);
	}
    }
}
Пример #3
0
void
caja_get_clipboard_callback (GtkClipboard     *clipboard,
                             GtkSelectionData *selection_data,
                             guint             info,
                             gpointer          user_data)
{
    char **uris;
    GList *l;
    int i;
    CajaClipboardInfo *clipboard_info;
    GdkAtom target;

    clipboard_info =
        caja_clipboard_monitor_get_clipboard_info (caja_clipboard_monitor_get ());

    target = gtk_selection_data_get_target (selection_data);

    if (gtk_targets_include_uri (&target, 1))
    {
        uris = g_malloc ((g_list_length (clipboard_info->files) + 1) * sizeof (char *));
        i = 0;

        for (l = clipboard_info->files; l != NULL; l = l->next)
        {
            uris[i] = caja_file_get_uri (l->data);
            i++;
        }

        uris[i] = NULL;

        gtk_selection_data_set_uris (selection_data, uris);

        g_strfreev (uris);
    }
    else if (gtk_targets_include_text (&target, 1))
    {
        char *str;
        gsize len;

        str = convert_file_list_to_string (clipboard_info, TRUE, &len);
        gtk_selection_data_set_text (selection_data, str, len);
        g_free (str);
    }
    else if (target == copied_files_atom)
    {
        char *str;
        gsize len;

        str = convert_file_list_to_string (clipboard_info, FALSE, &len);
        gtk_selection_data_set (selection_data, copied_files_atom, 8, str, len);
        g_free (str);
    }
}
Пример #4
0
static VALUE
targets_include_uri(VALUE self, VALUE rbtargets)
{
    long n;
    GdkAtom *targets = RVAL2GDKATOMS(rbtargets, &n);
    gboolean result;

    result = gtk_targets_include_uri(targets, n);

    g_free(targets);

    return result;
}
Пример #5
0
static void
_get_clipboard_callback	(GtkClipboard*		clipboard,
			 GtkSelectionData*	selection_data,
			 guint			info,
			 gpointer               user_data)
{
    g_debug ("_get_clipboard_callback: begin");
    GdkAtom target;
    target = gtk_selection_data_get_target (selection_data);

    // set to a URI string
    if (gtk_targets_include_uri (&target, 1))
    {
	char **uris;
	uris = g_malloc ((clipboard_info.num + 1) * sizeof (char *));

	int i = 0;
	for (i = 0; i < clipboard_info.num; i++)
	{
	    uris[i] = g_file_get_uri (clipboard_info.file_list[i]);
	    i++;
	}
	uris[i] = NULL;

	gtk_selection_data_set_uris (selection_data, uris);
	g_strfreev (uris);
    }
    // set to a UTF-8 encoded string
    else if (gtk_targets_include_text (&target, 1))
    {
	char *str;
       	gsize len;
	str = __convert_file_list_to_string (&clipboard_info, TRUE, &len);

	gtk_selection_data_set_text (selection_data, str, len);
	g_free (str);
    }
    //NOTE: cut or copy
    else if (target == copied_files_atom)
    {
	char *str;
	gsize len;
	str = __convert_file_list_to_string (&clipboard_info, FALSE, &len);

	gtk_selection_data_set (selection_data, copied_files_atom, 8, (const guchar*)str, len);
        g_free (str);
    }
    g_debug ("_get_clipboard_callback: end");
}
Пример #6
0
/**
 * gtk_selection_data_targets_include_uri:
 * @selection_data: a #GtkSelectionData object
 * 
 * Given a #GtkSelectionData object holding a list of targets,
 * determines if any of the targets in @targets can be used to
 * provide a list or URIs.
 * 
 * Returns: %TRUE if @selection_data holds a list of targets,
 *   and a suitable target for URI lists is included, otherwise %FALSE.
 **/
gboolean
gtk_selection_data_targets_include_uri (const GtkSelectionData *selection_data)
{
  GdkAtom *targets;
  gint n_targets;
  gboolean result = FALSE;

  g_return_val_if_fail (selection_data != NULL, FALSE);

  init_atoms ();

  if (gtk_selection_data_get_targets (selection_data, &targets, &n_targets))
    {
      result = gtk_targets_include_uri (targets, n_targets);
      g_free (targets);
    }

  return result;
}