Я учусь создавать расширение 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/
Спасибо.