Как отсортировать элементы в libnautilus-extension-dev? - PullRequest
0 голосов
/ 30 апреля 2020

Я учусь создавать расширение nautilus, точнее добавить элемент в контекстное меню.

Вот мой текущий код (libfoo. c):

#include <nautilus-extension.h>

#define NAUTILUS_TYPE_FOO (nautilus_foo_get_type ())

G_DECLARE_FINAL_TYPE ( NautilusFoo, nautilus_foo, NAUTILUS, FOO, GObject )

struct _NautilusFoo
{
    GObject parent_instance;
    gboolean foo_present;
};

static void menu_provider_iface_init ( NautilusMenuProviderInterface *iface );

G_DEFINE_DYNAMIC_TYPE_EXTENDED (NautilusFoo, nautilus_foo, G_TYPE_OBJECT, 0,
                                G_IMPLEMENT_INTERFACE_DYNAMIC (NAUTILUS_TYPE_MENU_PROVIDER,
                                                               menu_provider_iface_init))

/* Extension */
static void
callback ( NautilusMenuItem *item,
           gpointer         user_data ) {}

/* Interface */
static GList *
get_background_items ( NautilusMenuProvider *provider,
                       GtkWidget            *window,
                       NautilusFileInfo     *current_folder )
{
    NautilusMenuItem *item;
    GList *ret = NULL;

    item = nautilus_menu_item_new ( "NautilusFoo::foo",
                                    "Foo",
                                    "Foooooo",
                                    NULL );

    g_signal_connect ( item,
                       "activate",
                       G_CALLBACK ( callback ),
                       provider );

    g_object_set_data_full ( G_OBJECT ( item ),
                             "foo_extension_files",
                             nautilus_file_info_get_location ( current_folder ),
                             NULL );

    ret = g_list_append ( ret, item );

    return ret;
}

static void
menu_provider_iface_init ( NautilusMenuProviderInterface *iface )
{
    iface->get_background_items = get_background_items;
}

/* Extension initialization */
static void
nautilus_foo_init ( NautilusFoo *foo )
{
    g_autofree char *path = NULL;

    path = g_find_program_in_path ( "libfoo" );
    foo->foo_present = ( path != NULL );
}

static void
nautilus_foo_class_init ( NautilusFooClass *klass ) {}

static void
nautilus_foo_class_finalize ( NautilusFooClass *klass ) {}

void
nautilus_foo_load ( GTypeModule *module )
{
    nautilus_foo_register_type ( module );
}

/* Module initialization */
void
nautilus_module_initialize ( GTypeModule *module )
{
    nautilus_foo_load ( module );
}

void
nautilus_module_shutdown ( void ) {}

void
nautilus_module_list_types ( const GType **types,
                             int         *num_types )
{
    static GType type_list[1];

    type_list[0] = NAUTILUS_TYPE_FOO;
    *types = type_list;

    *num_types = 1;
}

Компилировать с помощью G CC:

g cc - c libfoo. c -o libfoo.o -fPI C $ (расширение pkg-config libnautilus -cflags --cflags )

g cc -shared libfoo.o -o libfoo.so $ (pkg-config libnautilus-extension --libs)

Далее переместите libfoo.so:

sudo cp libfoo.so /usr/lib/x86_64-linux-gnu/nautilus/extensions-3.0/

Наконец, перезапустите Nautilus:

nautilus -q

Работает отлично, но возможно ли сортировать элементы?

Я хотел бы поместить элемент в первое из список в контекстном меню ...

Не могу найти документацию по https://developer.gnome.org/libnautilus-extension/3.24/

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...