コード例 #1
0
ファイル: launcher_category.c プロジェクト: electricface/dde
PRIVATE
JSObjectRef _init_category_table()
{
    JSObjectRef items = json_array_create();
    GList* app_infos = g_app_info_get_all();

    GList* iter = app_infos;
    for (gsize i=0, skip=0; iter != NULL; i++, iter = g_list_next(iter)) {

        GAppInfo* info = iter->data;
        if (!g_app_info_should_show(info)) {
            skip++;
            continue;
        }

        record_category_info(G_DESKTOP_APP_INFO(info));

        json_array_insert_nobject(items, i - skip,
                                  info, g_object_ref, g_object_unref);

        g_object_unref(info);
    }

    g_list_free(app_infos); //the element of GAppInfo should free by JSRunTime not here!

    return items;
}
コード例 #2
0
//TODO: multiple copy, single cut.
//  or  single copy, single cut.
void
fileops_paste (GFile* dest_dir)
{
    if (copied_files_atom == GDK_NONE)
	copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
    //TODO: we may not own the clipboard now
    //cut : move files
    //use clipboard_info or clipboard_info_tmp
    FileOpsClipboardInfo* real_info = NULL;

    //cleanup  tmp clipboard info
    g_debug ("free tmp clipboard info");
    __clear_clipboard_info (&clipboard_info_tmp);

    if (__request_clipboard_contents (&clipboard_info_tmp))
	real_info = &clipboard_info_tmp;

    if (real_info == NULL || real_info->num == 0)
	return;

    if (real_info->cut)
    {
	fileops_move (real_info->file_list, real_info->num, dest_dir, true);
        //post messages event paste cancelled or failed.
	JSObjectRef json = json_array_create();
	for (int i = 0; i < real_info->num; i++)
	{
	    json_array_insert_nobject (json, i, real_info->file_list[i],
                                       g_object_ref, g_object_unref);
            g_debug ("send file: %d : %s", i, g_file_get_uri (real_info->file_list[i]));
	}
	js_post_message ("cut_completed", json);

        gtk_clipboard_clear (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD));

        g_debug ("free tmp clipboard info");
	__clear_clipboard_info (&clipboard_info_tmp);
	//though maybe we're not the clipboard owner, we still
	//free clipboard_info here to avoid possible memory leak
        g_debug ("free clipboard info");
	__clear_clipboard_info (&clipboard_info);

    }
    else
    {
	//copy can be done multiple times. so we should not free real_info;
	fileops_copy (real_info->file_list, real_info->num, dest_dir);
    }
}
コード例 #3
0
ファイル: desktop.c プロジェクト: CannedFish/dde
JS_EXPORT_API
JSObjectRef desktop_get_desktop_entries()
{
    JSObjectRef array = json_array_create();
    GDir* dir = g_dir_open(DESKTOP_DIR(), 0, NULL);

    const char* file_name = NULL;
    for (int i=0; NULL != (file_name = g_dir_read_name(dir));) {
        if(desktop_file_filter(file_name))
            continue;
        char* path = g_build_filename(DESKTOP_DIR(), file_name, NULL);
        Entry* e = dentry_create_by_path(path);
        g_free(path);
        json_array_insert_nobject(array, i++, e, g_object_ref, g_object_unref);
        g_object_unref(e);
    }
    g_dir_close(dir);
    return array;
}
コード例 #4
0
/*
 *	clear clipboard_info_prev,
 *	keep clipboard_info
 */
static void
_clear_clipboard_callback (GtkClipboard *clipboard,
			   gpointer      user_data)
{
    g_debug ("_clear_clipboard_callback: begin");

    GList* file_list = NULL;

    g_debug ("prev: num = %d; operation = %s", clipboard_info_prev.num, clipboard_info_prev.cut?"cut":"copy");
    if (clipboard_info_prev.cut == FALSE)
    {
	if (clipboard_info.cut == TRUE)
	{
	    for (int i = 0; i < clipboard_info.num; i++)
	    {
		file_list = g_list_append (file_list, g_object_ref (clipboard_info.file_list[i]));
	    }
	}
    }
    //clipboard_info_prev.cut == TRUE)
    else if (clipboard_info_prev.num != 0)
    {
	file_list = __set_diff_clipboard_info (&clipboard_info, &clipboard_info_prev);
    }
    // send message.
    int i = 0;
    GList* l = NULL;
    JSObjectRef json = json_array_create();
    for (l = file_list; l != NULL; l = l->next)
    {
	json_array_insert_nobject (json, i, l->data, g_object_ref, g_object_unref);
        g_debug ("send file: %d : %s", i, g_file_get_uri (l->data));
	i++;
    }
    js_post_message ("cut_completed", json);
    //
    g_list_free_full (file_list, g_object_unref);
    __clear_clipboard_info (&clipboard_info_prev);
    g_debug ("_clear_clipboard_callback: end");
}