diff options
40 files changed, 1177 insertions, 1254 deletions
diff --git a/docs/reference/libnautilus-extension/libnautilus-extension-docs.xml b/docs/reference/libnautilus-extension/libnautilus-extension-docs.xml index a5d8badbe..1c88c6339 100644 --- a/docs/reference/libnautilus-extension/libnautilus-extension-docs.xml +++ b/docs/reference/libnautilus-extension/libnautilus-extension-docs.xml @@ -15,18 +15,23 @@ <title>API Reference</title> <chapter> + <title>Core Classes</title> + <xi:include href="xml/nautilus-column.xml" /> + <xi:include href="xml/nautilus-file-info.xml" /> + <xi:include href="xml/nautilus-menu.xml" /> + <xi:include href="xml/nautilus-menu-item.xml" /> + <xi:include href="xml/nautilus-property-page.xml" /> + </chapter> + + <xi:include href="xml/nautilus-extension.xml" /> + + <chapter> <title>Extension Interfaces</title> <xi:include href="xml/nautilus-column-provider.xml" /> - <xi:include href="xml/nautilus-column.xml" /> - <xi:include href="xml/nautilus-extension-types.xml" /> - <xi:include href="xml/nautilus-file-info.xml" /> <xi:include href="xml/nautilus-info-provider.xml" /> <xi:include href="xml/nautilus-location-widget-provider.xml" /> <xi:include href="xml/nautilus-menu-provider.xml" /> - <xi:include href="xml/nautilus-menu.xml" /> - <xi:include href="xml/nautilus-menu-item.xml" /> <xi:include href="xml/nautilus-property-page-provider.xml" /> - <xi:include href="xml/nautilus-property-page.xml" /> </chapter> </part> diff --git a/docs/reference/libnautilus-extension/libnautilus-extension-sections.txt b/docs/reference/libnautilus-extension/libnautilus-extension-sections.txt index ea216d3fd..e7d9d7340 100644 --- a/docs/reference/libnautilus-extension/libnautilus-extension-sections.txt +++ b/docs/reference/libnautilus-extension/libnautilus-extension-sections.txt @@ -1,46 +1,34 @@ +<INCLUDE>nautilus-extension.h</INCLUDE> + +<SECTION> +<FILE>nautilus-extension</FILE> +nautilus_module_initialize +nautilus_module_shutdown +nautilus_module_list_types +</SECTION> + <SECTION> <FILE>nautilus-location-widget-provider</FILE> NautilusLocationWidgetProvider -NautilusLocationWidgetProviderIface +NautilusLocationWidgetProviderInterface nautilus_location_widget_provider_get_widget -<SUBSECTION Standard> -NAUTILUS_LOCATION_WIDGET_PROVIDER -NAUTILUS_IS_LOCATION_WIDGET_PROVIDER -NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER -nautilus_location_widget_provider_get_type -NAUTILUS_LOCATION_WIDGET_PROVIDER_GET_IFACE </SECTION> <SECTION> <FILE>nautilus-menu-provider</FILE> NautilusMenuProvider -NautilusMenuProviderIface +NautilusMenuProviderInterface nautilus_menu_provider_get_file_items nautilus_menu_provider_get_background_items nautilus_menu_provider_emit_items_updated_signal -<SUBSECTION Standard> -NAUTILUS_MENU_PROVIDER -NAUTILUS_IS_MENU_PROVIDER -NAUTILUS_TYPE_MENU_PROVIDER -nautilus_menu_provider_get_type -NAUTILUS_MENU_PROVIDER_GET_IFACE </SECTION> <SECTION> <FILE>nautilus-menu</FILE> -NautilusMenuPrivate NautilusMenu nautilus_menu_new nautilus_menu_append_item nautilus_menu_get_items -<SUBSECTION Standard> -NAUTILUS_MENU -NAUTILUS_IS_MENU -NAUTILUS_TYPE_MENU -nautilus_menu_get_type -NAUTILUS_MENU_CLASS -NAUTILUS_IS_MENU_CLASS -NAUTILUS_MENU_GET_CLASS </SECTION> <SECTION> @@ -51,40 +39,20 @@ nautilus_menu_item_get_type nautilus_menu_item_new nautilus_menu_item_activate nautilus_menu_item_set_submenu -<SUBSECTION Standard> -NAUTILUS_TYPE_MENU_ITEM -NAUTILUS_MENU_ITEM -NAUTILUS_MENU_ITEM_CLASS -NAUTILUS_MENU_IS_ITEM -NAUTILUS_MENU_IS_ITEM_CLASS -NAUTILUS_MENU_ITEM_GET_CLASS -NautilusMenuItemDetails </SECTION> <SECTION> <FILE>nautilus-column-provider</FILE> NautilusColumnProvider -NautilusColumnProviderIface +NautilusColumnProviderInterface nautilus_column_provider_get_columns -<SUBSECTION Standard> -NAUTILUS_COLUMN_PROVIDER -NAUTILUS_IS_COLUMN_PROVIDER -NAUTILUS_TYPE_COLUMN_PROVIDER -nautilus_column_provider_get_type -NAUTILUS_COLUMN_PROVIDER_GET_IFACE </SECTION> <SECTION> <FILE>nautilus-property-page-provider</FILE> NautilusPropertyPageProvider -NautilusPropertyPageProviderIface +NautilusPropertyPageProviderInterface nautilus_property_page_provider_get_pages -<SUBSECTION Standard> -NAUTILUS_PROPERTY_PAGE_PROVIDER -NAUTILUS_IS_PROPERTY_PAGE_PROVIDER -NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER -nautilus_property_page_provider_get_type -NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE </SECTION> <SECTION> @@ -92,7 +60,7 @@ NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE NAUTILUS_FILE_DEFINED NautilusFile NautilusFileInfo -NautilusFileInfoIface +NautilusFileInfoInterface nautilus_file_info_create nautilus_file_info_create_for_uri nautilus_file_info_lookup @@ -118,68 +86,28 @@ nautilus_file_info_add_emblem nautilus_file_info_get_string_attribute nautilus_file_info_add_string_attribute nautilus_file_info_invalidate_extension_info -<SUBSECTION Standard> -NAUTILUS_FILE_INFO -NAUTILUS_IS_FILE_INFO -NAUTILUS_TYPE_FILE_INFO -nautilus_file_info_get_type -NAUTILUS_FILE_INFO_GET_IFACE </SECTION> <SECTION> <FILE>nautilus-column</FILE> NautilusColumn nautilus_column_new -<SUBSECTION Standard> -NAUTILUS_COLUMN -NAUTILUS_INFO_IS_COLUMN -NAUTILUS_TYPE_COLUMN -nautilus_column_get_type -NAUTILUS_COLUMN_CLASS -NAUTILUS_INFO_IS_COLUMN_CLASS -NAUTILUS_COLUMN_GET_CLASS -NautilusColumnDetails </SECTION> <SECTION> <FILE>nautilus-info-provider</FILE> NautilusInfoProvider -NautilusInfoProviderIface -NautilusInfoProviderUpdateComplete +NautilusInfoProviderInterface NautilusOperationHandle NautilusOperationResult nautilus_info_provider_update_file_info nautilus_info_provider_cancel_update nautilus_info_provider_update_complete_invoke -<SUBSECTION Standard> -NAUTILUS_TYPE_OPERATION_RESULT -nautilus_operation_result_get_type -NAUTILUS_INFO_PROVIDER -NAUTILUS_IS_INFO_PROVIDER -NAUTILUS_TYPE_INFO_PROVIDER -nautilus_info_provider_get_type -NAUTILUS_INFO_PROVIDER_GET_IFACE </SECTION> <SECTION> <FILE>nautilus-property-page</FILE> NautilusPropertyPage nautilus_property_page_new -<SUBSECTION Standard> -NAUTILUS_PROPERTY_PAGE -NAUTILUS_IS_PROPERTY_PAGE -NAUTILUS_TYPE_PROPERTY_PAGE -nautilus_property_page_get_type -NAUTILUS_PROPERTY_PAGE_CLASS -NAUTILUS_IS_PROPERTY_PAGE_CLASS -NAUTILUS_PROPERTY_PAGE_GET_CLASS -NautilusPropertyPageDetails -</SECTION> - -<SECTION> -<FILE>nautilus-extension-types</FILE> -nautilus_module_initialize -nautilus_module_shutdown -nautilus_module_list_types </SECTION> diff --git a/libnautilus-extension/meson.build b/libnautilus-extension/meson.build index 99dc4309e..e7c5717cf 100644 --- a/libnautilus-extension/meson.build +++ b/libnautilus-extension/meson.build @@ -1,13 +1,16 @@ -nautilus_extension_version = '1.4.0' +nautilus_extension_version = '1.5.0' + +libnautilus_extension_deprecated_headers = [ + 'nautilus-extension-types.h', + 'nautilus-menu-item.h' +] libnautilus_extension_headers = [ 'nautilus-column-provider.h', 'nautilus-column.h', - 'nautilus-extension-types.h', 'nautilus-file-info.h', 'nautilus-info-provider.h', 'nautilus-location-widget-provider.h', - 'nautilus-menu-item.h', 'nautilus-menu-provider.h', 'nautilus-property-page-provider.h', 'nautilus-property-page.h', @@ -15,14 +18,28 @@ libnautilus_extension_headers = [ ] install_headers( + 'nautilus-extension.h', + subdir: 'nautilus' +) +install_headers( libnautilus_extension_headers, + libnautilus_extension_deprecated_headers, subdir: join_paths('nautilus', 'libnautilus-extension') ) libnautilus_extension_sources = [ + gnome.mkenums_simple( + 'nautilus-extension-enum-types', + install_header: true, + install_dir: join_paths(includedir, 'nautilus', 'libnautilus-extension'), + sources: [ + 'nautilus-info-provider.h' + ] + ), + libnautilus_extension_headers, 'nautilus-column-provider.c', 'nautilus-column.c', - 'nautilus-extension-types.c', + 'nautilus-extension.h', 'nautilus-extension-private.h', 'nautilus-file-info.c', 'nautilus-info-provider.c', @@ -40,8 +57,13 @@ libnautilus_extension_deps = [ ] libnautilus_extension = shared_library( - 'nautilus-extension', - libnautilus_extension_sources, + 'nautilus-extension', [ + libnautilus_extension_deprecated_headers, + libnautilus_extension_sources, + ], + c_args: [ + '-DNAUTILUS_COMPILATION' + ], dependencies: libnautilus_extension_deps, include_directories: nautilus_include_dirs, version: nautilus_extension_version, @@ -50,10 +72,10 @@ libnautilus_extension = shared_library( gnome.generate_gir( libnautilus_extension, - sources: [ - libnautilus_extension_headers, - libnautilus_extension_sources + extra_args: [ + '-DNAUTILUS_COMPILATION' ], + sources: libnautilus_extension_sources, nsversion: '3.0', namespace: 'Nautilus', includes: [ @@ -61,6 +83,7 @@ gnome.generate_gir( 'Gio-2.0', 'GLib-2.0' ], + header: 'nautilus-extension.h', install: true ) diff --git a/libnautilus-extension/nautilus-column-provider.c b/libnautilus-extension/nautilus-column-provider.c index 22519a635..f40bebaac 100644 --- a/libnautilus-extension/nautilus-column-provider.c +++ b/libnautilus-extension/nautilus-column-provider.c @@ -21,55 +21,24 @@ * */ -#include <config.h> #include "nautilus-column-provider.h" -#include <glib-object.h> +G_DEFINE_INTERFACE (NautilusColumnProvider, nautilus_column_provider, G_TYPE_OBJECT) /** * SECTION:nautilus-column-provider * @title: NautilusColumnProvider * @short_description: Interface to provide additional list view columns - * @include: libnautilus-extension/nautilus-column-provider.h * * #NautilusColumnProvider allows extension to provide additional columns * in the file manager list view. */ static void -nautilus_column_provider_base_init (gpointer g_class) +nautilus_column_provider_default_init (NautilusColumnProviderInterface *klass) { } -GType -nautilus_column_provider_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusColumnProviderIface), - nautilus_column_provider_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusColumnProvider", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } - - return type; -} - /** * nautilus_column_provider_get_columns: * @provider: a #NautilusColumnProvider @@ -77,11 +46,15 @@ nautilus_column_provider_get_type (void) * Returns: (element-type NautilusColumn) (transfer full): the provided #NautilusColumn objects */ GList * -nautilus_column_provider_get_columns (NautilusColumnProvider *provider) +nautilus_column_provider_get_columns (NautilusColumnProvider *self) { - g_return_val_if_fail (NAUTILUS_IS_COLUMN_PROVIDER (provider), NULL); - g_return_val_if_fail (NAUTILUS_COLUMN_PROVIDER_GET_IFACE (provider)->get_columns != NULL, NULL); + NautilusColumnProviderInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_COLUMN_PROVIDER (self), NULL); + + iface = NAUTILUS_COLUMN_PROVIDER_GET_IFACE (self); + + g_return_val_if_fail (iface->get_columns != NULL, NULL); - return NAUTILUS_COLUMN_PROVIDER_GET_IFACE (provider)->get_columns - (provider); + return iface->get_columns (self); } diff --git a/libnautilus-extension/nautilus-column-provider.h b/libnautilus-extension/nautilus-column-provider.h index dd6c8e1f0..de730bf5f 100644 --- a/libnautilus-extension/nautilus-column-provider.h +++ b/libnautilus-extension/nautilus-column-provider.h @@ -30,37 +30,40 @@ #ifndef NAUTILUS_COLUMN_PROVIDER_H #define NAUTILUS_COLUMN_PROVIDER_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> -#include "nautilus-extension-types.h" -#include "nautilus-column.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_COLUMN_PROVIDER (nautilus_column_provider_get_type ()) -#define NAUTILUS_COLUMN_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_COLUMN_PROVIDER, NautilusColumnProvider)) -#define NAUTILUS_IS_COLUMN_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_COLUMN_PROVIDER)) -#define NAUTILUS_COLUMN_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_COLUMN_PROVIDER, NautilusColumnProviderIface)) +#define NAUTILUS_TYPE_COLUMN_PROVIDER (nautilus_column_provider_get_type ()) + +G_DECLARE_INTERFACE (NautilusColumnProvider, nautilus_column_provider, + NAUTILUS, COLUMN_PROVIDER, + GObject) -typedef struct _NautilusColumnProvider NautilusColumnProvider; -typedef struct _NautilusColumnProviderIface NautilusColumnProviderIface; +/* For compatibility reasons, remove this once you start introducing breaking changes. */ +typedef NautilusColumnProviderInterface NautilusColumnProviderIface; /** - * NautilusColumnProviderIface: + * NautilusColumnProviderInterface: * @g_iface: The parent interface. * @get_columns: Returns a #GList of #NautilusColumn. * See nautilus_column_provider_get_columns() for details. * * Interface for extensions to provide additional list view columns. */ -struct _NautilusColumnProviderIface { - GTypeInterface g_iface; +struct _NautilusColumnProviderInterface +{ + GTypeInterface g_iface; - GList *(*get_columns) (NautilusColumnProvider *provider); + GList *(*get_columns) (NautilusColumnProvider *provider); }; /* Interface Functions */ -GType nautilus_column_provider_get_type (void); -GList *nautilus_column_provider_get_columns (NautilusColumnProvider *provider); +GList *nautilus_column_provider_get_columns (NautilusColumnProvider *provider); G_END_DECLS diff --git a/libnautilus-extension/nautilus-column.c b/libnautilus-extension/nautilus-column.c index fdf83204c..a36885091 100644 --- a/libnautilus-extension/nautilus-column.c +++ b/libnautilus-extension/nautilus-column.c @@ -21,8 +21,6 @@ * */ -#include <config.h> -#include <glib/gi18n-lib.h> #include <gtk/gtk.h> #include "nautilus-column.h" @@ -39,8 +37,10 @@ enum LAST_PROP }; -struct _NautilusColumnDetails +struct _NautilusColumn { + GObject parent_instance; + char *name; GQuark attribute; char *label; @@ -55,7 +55,6 @@ G_DEFINE_TYPE (NautilusColumn, nautilus_column, G_TYPE_OBJECT); * SECTION:nautilus-column * @title: NautilusColumn * @short_description: List view column descriptor object - * @include: libnautilus-extension/nautilus-column.h * * #NautilusColumn is an object that describes a column in the file manager * list view. Extensions can provide #NautilusColumn by registering a @@ -112,43 +111,43 @@ nautilus_column_get_property (GObject *object, { case PROP_NAME: { - g_value_set_string (value, column->details->name); + g_value_set_string (value, column->name); } break; case PROP_ATTRIBUTE: { - g_value_set_string (value, g_quark_to_string (column->details->attribute)); + g_value_set_string (value, g_quark_to_string (column->attribute)); } break; case PROP_ATTRIBUTE_Q: { - g_value_set_uint (value, column->details->attribute); + g_value_set_uint (value, column->attribute); } break; case PROP_LABEL: { - g_value_set_string (value, column->details->label); + g_value_set_string (value, column->label); } break; case PROP_DESCRIPTION: { - g_value_set_string (value, column->details->description); + g_value_set_string (value, column->description); } break; case PROP_XALIGN: { - g_value_set_float (value, column->details->xalign); + g_value_set_float (value, column->xalign); } break; case PROP_DEFAULT_SORT_ORDER: { - g_value_set_enum (value, column->details->default_sort_order); + g_value_set_enum (value, column->default_sort_order); } break; @@ -174,15 +173,15 @@ nautilus_column_set_property (GObject *object, { case PROP_NAME: { - g_free (column->details->name); - column->details->name = g_strdup (g_value_get_string (value)); + g_free (column->name); + column->name = g_strdup (g_value_get_string (value)); g_object_notify (object, "name"); } break; case PROP_ATTRIBUTE: { - column->details->attribute = g_quark_from_string (g_value_get_string (value)); + column->attribute = g_quark_from_string (g_value_get_string (value)); g_object_notify (object, "attribute"); g_object_notify (object, "attribute_q"); } @@ -190,30 +189,30 @@ nautilus_column_set_property (GObject *object, case PROP_LABEL: { - g_free (column->details->label); - column->details->label = g_strdup (g_value_get_string (value)); + g_free (column->label); + column->label = g_strdup (g_value_get_string (value)); g_object_notify (object, "label"); } break; case PROP_DESCRIPTION: { - g_free (column->details->description); - column->details->description = g_strdup (g_value_get_string (value)); + g_free (column->description); + column->description = g_strdup (g_value_get_string (value)); g_object_notify (object, "description"); } break; case PROP_XALIGN: { - column->details->xalign = g_value_get_float (value); + column->xalign = g_value_get_float (value); g_object_notify (object, "xalign"); } break; case PROP_DEFAULT_SORT_ORDER: { - column->details->default_sort_order = g_value_get_enum (value); + column->default_sort_order = g_value_get_enum (value); g_object_notify (object, "default-sort-order"); } break; @@ -233,11 +232,9 @@ nautilus_column_finalize (GObject *object) column = NAUTILUS_COLUMN (object); - g_free (column->details->name); - g_free (column->details->label); - g_free (column->details->description); - - g_free (column->details); + g_free (column->name); + g_free (column->label); + g_free (column->description); G_OBJECT_CLASS (nautilus_column_parent_class)->finalize (object); } @@ -245,8 +242,7 @@ nautilus_column_finalize (GObject *object) static void nautilus_column_init (NautilusColumn *column) { - column->details = g_new0 (NautilusColumnDetails, 1); - column->details->xalign = 0.0; + column->xalign = 0.0; } static void diff --git a/libnautilus-extension/nautilus-column.h b/libnautilus-extension/nautilus-column.h index 64de2cb77..c4e3ad9af 100644 --- a/libnautilus-extension/nautilus-column.h +++ b/libnautilus-extension/nautilus-column.h @@ -24,37 +24,22 @@ #ifndef NAUTILUS_COLUMN_H #define NAUTILUS_COLUMN_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> -#include "nautilus-extension-types.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_COLUMN (nautilus_column_get_type()) -#define NAUTILUS_COLUMN(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_COLUMN, NautilusColumn)) -#define NAUTILUS_COLUMN_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_COLUMN, NautilusColumnClass)) -#define NAUTILUS_INFO_IS_COLUMN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_COLUMN)) -#define NAUTILUS_INFO_IS_COLUMN_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NAUTILUS_TYPE_COLUMN)) -#define NAUTILUS_COLUMN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), NAUTILUS_TYPE_COLUMN, NautilusColumnClass)) - -typedef struct _NautilusColumn NautilusColumn; -typedef struct _NautilusColumnDetails NautilusColumnDetails; -typedef struct _NautilusColumnClass NautilusColumnClass; - -struct _NautilusColumn { - GObject parent; - - NautilusColumnDetails *details; -}; +#define NAUTILUS_TYPE_COLUMN (nautilus_column_get_type()) -struct _NautilusColumnClass { - GObjectClass parent; -}; +G_DECLARE_FINAL_TYPE (NautilusColumn, nautilus_column, NAUTILUS, COLUMN, GObject) -GType nautilus_column_get_type (void); -NautilusColumn * nautilus_column_new (const char *name, - const char *attribute, - const char *label, - const char *description); +NautilusColumn *nautilus_column_new (const char *name, + const char *attribute, + const char *label, + const char *description); /* NautilusColumn has the following properties: * name (string) - the identifier for the column diff --git a/libnautilus-extension/nautilus-extension-types.c b/libnautilus-extension/nautilus-extension-types.c deleted file mode 100644 index 37bb92633..000000000 --- a/libnautilus-extension/nautilus-extension-types.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - * nautilus-extension-types.c - Type definitions for Nautilus extensions - * - * Copyright (C) 2003 Novell, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, see <http://www.gnu.org/licenses/>. - * - * Author: Dave Camp <dave@ximian.com> - * - */ - -#include <config.h> -#include "nautilus-extension-types.h" - - -GType -nautilus_operation_result_get_type (void) -{ - static GType type = 0; - if (type == 0) - { - static const GEnumValue values[] = - { - { - NAUTILUS_OPERATION_COMPLETE, - "NAUTILUS_OPERATION_COMPLETE", - "complete", - }, - { - NAUTILUS_OPERATION_FAILED, - "NAUTILUS_OPERATION_FAILED", - "failed", - }, - { - NAUTILUS_OPERATION_IN_PROGRESS, - "NAUTILUS_OPERATION_IN_PROGRESS", - "in_progress", - }, - { 0, NULL, NULL } - }; - - type = g_enum_register_static ("NautilusOperationResult", - values); - } - - return type; -} diff --git a/libnautilus-extension/nautilus-extension-types.h b/libnautilus-extension/nautilus-extension-types.h index ca7ec7fe5..43a0b2056 100644 --- a/libnautilus-extension/nautilus-extension-types.h +++ b/libnautilus-extension/nautilus-extension-types.h @@ -1,6 +1,5 @@ -/* - * nautilus-info-provider.h - Type definitions for Nautilus extensions - * +/* nautilus-info-provider.h - Type definitions for Nautilus extensions + * * Copyright (C) 2003 Novell, Inc. * * This library is free software; you can redistribute it and/or @@ -17,7 +16,7 @@ * License along with this library; if not, see <http://www.gnu.org/licenses/>. * * Author: Dave Camp <dave@ximian.com> - * + * */ /* This interface is implemented by Nautilus extensions that want to @@ -28,64 +27,8 @@ #ifndef NAUTILUS_EXTENSION_TYPES_H #define NAUTILUS_EXTENSION_TYPES_H -#include <glib-object.h> - -G_BEGIN_DECLS - -#define NAUTILUS_TYPE_OPERATION_RESULT (nautilus_operation_result_get_type ()) - -/** - * NautilusOperationHandle: - * - * Handle for asynchronous interfaces. These are opaque handles that must - * be unique within an extension object. These are returned by operations - * that return #NAUTILUS_OPERATION_IN_PROGRESS. - */ -typedef struct _NautilusOperationHandle NautilusOperationHandle; - -/** - * NautilusOperationResult: - * @NAUTILUS_OPERATION_COMPLETE: the operation succeeded, and the extension - * is done with the request. - * @NAUTILUS_OPERATION_FAILED: the operation failed. - * @NAUTILUS_OPERATION_IN_PROGRESS: the extension has begin an async operation. - * When this value is returned, the extension must set the handle parameter - * and call the callback closure when the operation is complete. - * - * Return values for asynchronous operations performed by the extension. - * See nautilus_info_provider_update_file_info(). - */ -typedef enum { - /* Returned if the call succeeded, and the extension is done - * with the request */ - NAUTILUS_OPERATION_COMPLETE, - - /* Returned if the call failed */ - NAUTILUS_OPERATION_FAILED, - - /* Returned if the extension has begun an async operation. - * If this is returned, the extension must set the handle - * parameter and call the callback closure when the - * operation is complete. */ - NAUTILUS_OPERATION_IN_PROGRESS -} NautilusOperationResult; - -GType nautilus_operation_result_get_type (void); - -/** - * SECTION:nautilus-extension-types - * @title: NautilusModule - * @short_description: Initialize an extension - * @include: libnautilus-extension/nautilus-extension-types.h - * - * Methods that each extension implements. - */ - -void nautilus_module_initialize (GTypeModule *module); -void nautilus_module_shutdown (void); -void nautilus_module_list_types (const GType **types, - int *num_types); +#include <nautilus-extension.h> -G_END_DECLS +#warning "This header is deprecated, include <nautilus-extension.h> instead." #endif diff --git a/libnautilus-extension/nautilus-extension.h b/libnautilus-extension/nautilus-extension.h new file mode 100644 index 000000000..26159d1e8 --- /dev/null +++ b/libnautilus-extension/nautilus-extension.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2018 Ernestas Kulik <ernestask@gnome.org> + * + * This file is part of libnautilus-extension. + * + * libnautilus-extension is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either + * version 2.1 of the License, or (at your option) any later version. + * + * libnautilus-extension is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with libnautilus-extension. If not, see <https://www.gnu.org/licenses/>. + */ + +#ifndef NAUTILUS_EXTENSION_H +#define NAUTILUS_EXTENSION_H + +#include <libnautilus-extension/nautilus-column-provider.h> +#include <libnautilus-extension/nautilus-column.h> +#include <libnautilus-extension/nautilus-extension-enum-types.h> +#include <libnautilus-extension/nautilus-file-info.h> +#include <libnautilus-extension/nautilus-info-provider.h> +#include <libnautilus-extension/nautilus-location-widget-provider.h> +#include <libnautilus-extension/nautilus-menu.h> +#include <libnautilus-extension/nautilus-menu-provider.h> +#include <libnautilus-extension/nautilus-property-page.h> +#include <libnautilus-extension/nautilus-property-page-provider.h> + +/** + * SECTION:nautilus-extension + * @title: Extension entry points + */ + +void nautilus_module_initialize (GTypeModule *module); +void nautilus_module_shutdown (void); +void nautilus_module_list_types (const GType **types, + int *num_types); + +#endif diff --git a/libnautilus-extension/nautilus-file-info.c b/libnautilus-extension/nautilus-file-info.c index 2f2a46b93..db02a0b11 100644 --- a/libnautilus-extension/nautilus-file-info.c +++ b/libnautilus-extension/nautilus-file-info.c @@ -18,17 +18,18 @@ * */ -#include <config.h> #include "nautilus-file-info.h" + #include "nautilus-extension-private.h" +G_DEFINE_INTERFACE (NautilusFileInfo, nautilus_file_info, G_TYPE_OBJECT) + NautilusFileInfo *(*nautilus_file_info_getter)(GFile * location, gboolean create); /** * SECTION:nautilus-file-info * @title: NautilusFileInfo * @short_description: File interface for nautilus extensions - * @include: libnautilus-extension/nautilus-file-info.h * * #NautilusFileInfo provides methods to get and modify information * about file objects in the file manager. @@ -76,246 +77,309 @@ nautilus_file_info_list_free (GList *files) } static void -nautilus_file_info_base_init (gpointer g_class) +nautilus_file_info_default_init (NautilusFileInfoInterface *klass) { } -GType -nautilus_file_info_get_type (void) +gboolean +nautilus_file_info_is_gone (NautilusFileInfo *self) { - static GType type = 0; + NautilusFileInfoInterface *iface; - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusFileInfoIface), - nautilus_file_info_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusFileInfo", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), FALSE); - return type; -} + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); -gboolean -nautilus_file_info_is_gone (NautilusFileInfo *file) -{ - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_gone != NULL, FALSE); + g_return_val_if_fail (iface->is_gone != NULL, FALSE); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_gone (file); + return iface->is_gone (self); } GFileType -nautilus_file_info_get_file_type (NautilusFileInfo *file) +nautilus_file_info_get_file_type (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), G_FILE_TYPE_UNKNOWN); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_file_type != NULL, G_FILE_TYPE_UNKNOWN); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), G_FILE_TYPE_UNKNOWN); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_file_type (file); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_file_type != NULL, G_FILE_TYPE_UNKNOWN); + + return iface->get_file_type (self); } char * -nautilus_file_info_get_name (NautilusFileInfo *file) +nautilus_file_info_get_name (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_name != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_name (file); + g_return_val_if_fail (iface->get_name != NULL, NULL); + + return iface->get_name (self); } /** * nautilus_file_info_get_location: - * @file: a #NautilusFileInfo + * @file_info: a #NautilusFileInfo * - * Returns: (transfer full): a #GFile for the location of @file + * Returns: (transfer full): a #GFile for the location of @file_info */ GFile * -nautilus_file_info_get_location (NautilusFileInfo *file) +nautilus_file_info_get_location (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_location != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_location != NULL, NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_location (file); + return iface->get_location (self); } char * -nautilus_file_info_get_uri (NautilusFileInfo *file) +nautilus_file_info_get_uri (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri != NULL, NULL); + NautilusFileInfoInterface *iface; - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri (file); + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_uri != NULL, NULL); + + return iface->get_uri (self); } char * -nautilus_file_info_get_activation_uri (NautilusFileInfo *file) +nautilus_file_info_get_activation_uri (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_activation_uri != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_activation_uri (file); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_activation_uri != NULL, NULL); + + return iface->get_activation_uri (self); } /** * nautilus_file_info_get_parent_location: - * @file: a #NautilusFileInfo + * @file_info: a #NautilusFileInfo * - * Returns: (allow-none) (transfer full): a #GFile for the parent location of @file, - * or %NULL if @file has no parent + * Returns: (allow-none) (transfer full): a #GFile for the parent location of @file_info, + * or %NULL if @file_info has no parent */ GFile * -nautilus_file_info_get_parent_location (NautilusFileInfo *file) +nautilus_file_info_get_parent_location (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_location != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_location (file); + g_return_val_if_fail (iface->get_parent_location != NULL, NULL); + + return iface->get_parent_location (self); } char * -nautilus_file_info_get_parent_uri (NautilusFileInfo *file) +nautilus_file_info_get_parent_uri (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_uri != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_parent_uri != NULL, NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_uri (file); + return iface->get_parent_uri (self); } /** * nautilus_file_info_get_parent_info: - * @file: a #NautilusFileInfo + * @file_info: a #NautilusFileInfo * - * Returns: (allow-none) (transfer full): a #NautilusFileInfo for the parent of @file, - * or %NULL if @file has no parent + * Returns: (allow-none) (transfer full): a #NautilusFileInfo for the parent of @file_info, + * or %NULL if @file_info has no parent */ NautilusFileInfo * -nautilus_file_info_get_parent_info (NautilusFileInfo *file) +nautilus_file_info_get_parent_info (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_info != NULL, NULL); + NautilusFileInfoInterface *iface; - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_parent_info (file); + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_parent_info != NULL, NULL); + + return iface->get_parent_info (self); } /** * nautilus_file_info_get_mount: - * @file: a #NautilusFileInfo + * @file_info: a #NautilusFileInfo * - * Returns: (allow-none) (transfer full): a #GMount for the mount of @file, - * or %NULL if @file has no mount + * Returns: (allow-none) (transfer full): a #GMount for the mount of @file_info, + * or %NULL if @file_info has no mount */ GMount * -nautilus_file_info_get_mount (NautilusFileInfo *file) +nautilus_file_info_get_mount (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mount != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mount (file); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_mount != NULL, NULL); + + return iface->get_mount (self); } char * -nautilus_file_info_get_uri_scheme (NautilusFileInfo *file) +nautilus_file_info_get_uri_scheme (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_uri_scheme != NULL, NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_uri_scheme (file); + return iface->get_uri_scheme (self); } char * -nautilus_file_info_get_mime_type (NautilusFileInfo *file) +nautilus_file_info_get_mime_type (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mime_type != NULL, NULL); + NautilusFileInfoInterface *iface; - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_mime_type (file); + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_mime_type != NULL, NULL); + + return iface->get_mime_type (self); } gboolean -nautilus_file_info_is_mime_type (NautilusFileInfo *file, +nautilus_file_info_is_mime_type (NautilusFileInfo *self, const char *mime_type) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), FALSE); g_return_val_if_fail (mime_type != NULL, FALSE); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_mime_type != NULL, FALSE); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_mime_type (file, - mime_type); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->is_mime_type != NULL, FALSE); + + return iface->is_mime_type (self, mime_type); } gboolean -nautilus_file_info_is_directory (NautilusFileInfo *file) +nautilus_file_info_is_directory (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->is_directory != NULL, FALSE); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), FALSE); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->is_directory (file); + g_return_val_if_fail (iface->is_directory != NULL, FALSE); + + return iface->is_directory (self); } gboolean -nautilus_file_info_can_write (NautilusFileInfo *file) +nautilus_file_info_can_write (NautilusFileInfo *self) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), FALSE); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->can_write != NULL, FALSE); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), FALSE); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->can_write != NULL, FALSE); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->can_write (file); + return iface->can_write (self); } void -nautilus_file_info_add_emblem (NautilusFileInfo *file, +nautilus_file_info_add_emblem (NautilusFileInfo *self, const char *emblem_name) { - g_return_if_fail (NAUTILUS_IS_FILE_INFO (file)); - g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->add_emblem != NULL); + NautilusFileInfoInterface *iface; - NAUTILUS_FILE_INFO_GET_IFACE (file)->add_emblem (file, emblem_name); + g_return_if_fail (NAUTILUS_IS_FILE_INFO (self)); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_if_fail (iface->add_emblem != NULL); + + iface->add_emblem (self, emblem_name); } char * -nautilus_file_info_get_string_attribute (NautilusFileInfo *file, +nautilus_file_info_get_string_attribute (NautilusFileInfo *self, const char *attribute_name) { - g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (file), NULL); - g_return_val_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->get_string_attribute != NULL, NULL); + NautilusFileInfoInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (self), NULL); g_return_val_if_fail (attribute_name != NULL, NULL); - return NAUTILUS_FILE_INFO_GET_IFACE (file)->get_string_attribute - (file, attribute_name); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_val_if_fail (iface->get_string_attribute != NULL, NULL); + + return iface->get_string_attribute (self, attribute_name); } void -nautilus_file_info_add_string_attribute (NautilusFileInfo *file, +nautilus_file_info_add_string_attribute (NautilusFileInfo *self, const char *attribute_name, const char *value) { - g_return_if_fail (NAUTILUS_IS_FILE_INFO (file)); - g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->add_string_attribute != NULL); + NautilusFileInfoInterface *iface; + + g_return_if_fail (NAUTILUS_IS_FILE_INFO (self)); g_return_if_fail (attribute_name != NULL); g_return_if_fail (value != NULL); - NAUTILUS_FILE_INFO_GET_IFACE (file)->add_string_attribute - (file, attribute_name, value); + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_if_fail (iface->add_string_attribute != NULL); + + iface->add_string_attribute (self, attribute_name, value); } void -nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file) +nautilus_file_info_invalidate_extension_info (NautilusFileInfo *self) { - g_return_if_fail (NAUTILUS_IS_FILE_INFO (file)); - g_return_if_fail (NAUTILUS_FILE_INFO_GET_IFACE (file)->invalidate_extension_info != NULL); + NautilusFileInfoInterface *iface; + + g_return_if_fail (NAUTILUS_IS_FILE_INFO (self)); + + iface = NAUTILUS_FILE_INFO_GET_IFACE (self); + + g_return_if_fail (iface->invalidate_extension_info != NULL); - NAUTILUS_FILE_INFO_GET_IFACE (file)->invalidate_extension_info (file); + iface->invalidate_extension_info (self); } /** @@ -327,6 +391,8 @@ nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file) NautilusFileInfo * nautilus_file_info_lookup (GFile *location) { + g_return_val_if_fail (G_IS_FILE (location), NULL); + return nautilus_file_info_getter (location, FALSE); } @@ -339,6 +405,8 @@ nautilus_file_info_lookup (GFile *location) NautilusFileInfo * nautilus_file_info_create (GFile *location) { + g_return_val_if_fail (G_IS_FILE (location), NULL); + return nautilus_file_info_getter (location, TRUE); } @@ -351,14 +419,13 @@ nautilus_file_info_create (GFile *location) NautilusFileInfo * nautilus_file_info_lookup_for_uri (const char *uri) { - GFile *location; - NautilusFile *file; + g_autoptr (GFile) location = NULL; + + g_return_val_if_fail (uri != NULL, NULL); location = g_file_new_for_uri (uri); - file = nautilus_file_info_lookup (location); - g_object_unref (location); - return file; + return nautilus_file_info_lookup (location); } /** @@ -370,12 +437,11 @@ nautilus_file_info_lookup_for_uri (const char *uri) NautilusFileInfo * nautilus_file_info_create_for_uri (const char *uri) { - GFile *location; - NautilusFile *file; + g_autoptr (GFile) location = NULL; + + g_return_val_if_fail (uri != NULL, NULL); location = g_file_new_for_uri (uri); - file = nautilus_file_info_create (location); - g_object_unref (location); - return file; + return nautilus_file_info_create (location); } diff --git a/libnautilus-extension/nautilus-file-info.h b/libnautilus-extension/nautilus-file-info.h index 4660ad7c2..0e7ea8539 100644 --- a/libnautilus-extension/nautilus-file-info.h +++ b/libnautilus-extension/nautilus-file-info.h @@ -25,28 +25,29 @@ #ifndef NAUTILUS_FILE_INFO_H #define NAUTILUS_FILE_INFO_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> #include <gio/gio.h> G_BEGIN_DECLS -#define NAUTILUS_TYPE_FILE_INFO (nautilus_file_info_get_type ()) -#define NAUTILUS_FILE_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_FILE_INFO, NautilusFileInfo)) -#define NAUTILUS_IS_FILE_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_FILE_INFO)) -#define NAUTILUS_FILE_INFO_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_FILE_INFO, NautilusFileInfoIface)) +#define NAUTILUS_TYPE_FILE_INFO (nautilus_file_info_get_type ()) -#ifndef NAUTILUS_FILE_DEFINED -#define NAUTILUS_FILE_DEFINED -/* Using NautilusFile for the vtable to make implementing this in - * NautilusFile easier */ -typedef struct NautilusFile NautilusFile; -#endif +G_DECLARE_INTERFACE (NautilusFileInfo, nautilus_file_info, NAUTILUS, FILE_INFO, GObject) -typedef NautilusFile NautilusFileInfo; -typedef struct _NautilusFileInfoIface NautilusFileInfoIface; +/* For compatibility reasons, remove this once you start introducing breaking changes. + * + * I’ve only noticed nautilus-python depending on this, but the context is that + * NautilusFileInfo used to be an alias for NautilusFile to make it easier to + * implement the interface, + */ +typedef struct NautilusFile NautilusFile; /** - * NautilusFileInfoIface: + * NautilusFileInfoInterface: * @g_iface: The parent interface. * @is_gone: Returns whether the file info is gone. * See nautilus_file_info_is_gone() for details. @@ -89,83 +90,81 @@ typedef struct _NautilusFileInfoIface NautilusFileInfoIface; * * Interface for extensions to provide additional menu items. */ -struct _NautilusFileInfoIface +struct _NautilusFileInfoInterface { - GTypeInterface g_iface; - - gboolean (*is_gone) (NautilusFileInfo *file); - - char * (*get_name) (NautilusFileInfo *file); - char * (*get_uri) (NautilusFileInfo *file); - char * (*get_parent_uri) (NautilusFileInfo *file); - char * (*get_uri_scheme) (NautilusFileInfo *file); - - char * (*get_mime_type) (NautilusFileInfo *file); - gboolean (*is_mime_type) (NautilusFileInfo *file, - const char *mime_Type); - gboolean (*is_directory) (NautilusFileInfo *file); - - void (*add_emblem) (NautilusFileInfo *file, - const char *emblem_name); - char * (*get_string_attribute) (NautilusFileInfo *file, - const char *attribute_name); - void (*add_string_attribute) (NautilusFileInfo *file, - const char *attribute_name, - const char *value); - void (*invalidate_extension_info) (NautilusFileInfo *file); - - char * (*get_activation_uri) (NautilusFileInfo *file); - - GFileType (*get_file_type) (NautilusFileInfo *file); - GFile * (*get_location) (NautilusFileInfo *file); - GFile * (*get_parent_location) (NautilusFileInfo *file); - NautilusFileInfo* (*get_parent_info) (NautilusFileInfo *file); - GMount * (*get_mount) (NautilusFileInfo *file); - gboolean (*can_write) (NautilusFileInfo *file); - + GTypeInterface g_iface; + + gboolean (*is_gone) (NautilusFileInfo *file_info); + + char *(*get_name) (NautilusFileInfo *file_info); + char *(*get_uri) (NautilusFileInfo *file_info); + char *(*get_parent_uri) (NautilusFileInfo *file_info); + char *(*get_uri_scheme) (NautilusFileInfo *file_info); + + char *(*get_mime_type) (NautilusFileInfo *file_info); + gboolean (*is_mime_type) (NautilusFileInfo *file_info, + const char *mime_type); + gboolean (*is_directory) (NautilusFileInfo *file_info); + + void (*add_emblem) (NautilusFileInfo *file_info, + const char *emblem_name); + char *(*get_string_attribute) (NautilusFileInfo *file_info, + const char *attribute_name); + void (*add_string_attribute) (NautilusFileInfo *file_info, + const char *attribute_name, + const char *value); + void (*invalidate_extension_info) (NautilusFileInfo *file_info); + + char *(*get_activation_uri) (NautilusFileInfo *file_info); + + GFileType (*get_file_type) (NautilusFileInfo *file_info); + GFile *(*get_location) (NautilusFileInfo *file_info); + GFile *(*get_parent_location) (NautilusFileInfo *file_info); + NautilusFileInfo *(*get_parent_info) (NautilusFileInfo *file_info); + GMount *(*get_mount) (NautilusFileInfo *file_info); + gboolean (*can_write) (NautilusFileInfo *file_info); }; GList *nautilus_file_info_list_copy (GList *files); void nautilus_file_info_list_free (GList *files); -GType nautilus_file_info_get_type (void); /* Return true if the file has been deleted */ -gboolean nautilus_file_info_is_gone (NautilusFileInfo *file); +gboolean nautilus_file_info_is_gone (NautilusFileInfo *file_info); /* Name and Location */ -GFileType nautilus_file_info_get_file_type (NautilusFileInfo *file); -GFile * nautilus_file_info_get_location (NautilusFileInfo *file); -char * nautilus_file_info_get_name (NautilusFileInfo *file); -char * nautilus_file_info_get_uri (NautilusFileInfo *file); -char * nautilus_file_info_get_activation_uri (NautilusFileInfo *file); -GFile * nautilus_file_info_get_parent_location (NautilusFileInfo *file); -char * nautilus_file_info_get_parent_uri (NautilusFileInfo *file); -GMount * nautilus_file_info_get_mount (NautilusFileInfo *file); -char * nautilus_file_info_get_uri_scheme (NautilusFileInfo *file); +GFileType nautilus_file_info_get_file_type (NautilusFileInfo *file_info); +GFile *nautilus_file_info_get_location (NautilusFileInfo *file_info); +char *nautilus_file_info_get_name (NautilusFileInfo *file_info); +char *nautilus_file_info_get_uri (NautilusFileInfo *file_info); +char *nautilus_file_info_get_activation_uri (NautilusFileInfo *file_info); +GFile *nautilus_file_info_get_parent_location (NautilusFileInfo *file_info); +char *nautilus_file_info_get_parent_uri (NautilusFileInfo *file_info); +GMount *nautilus_file_info_get_mount (NautilusFileInfo *file_info); +char *nautilus_file_info_get_uri_scheme (NautilusFileInfo *file_info); /* It's not safe to call this recursively multiple times, as it works * only for files already cached by Nautilus. */ -NautilusFileInfo* nautilus_file_info_get_parent_info (NautilusFileInfo *file); +NautilusFileInfo *nautilus_file_info_get_parent_info (NautilusFileInfo *file_info); /* File Type */ -char * nautilus_file_info_get_mime_type (NautilusFileInfo *file); -gboolean nautilus_file_info_is_mime_type (NautilusFileInfo *file, - const char *mime_type); -gboolean nautilus_file_info_is_directory (NautilusFileInfo *file); -gboolean nautilus_file_info_can_write (NautilusFileInfo *file); +char * nautilus_file_info_get_mime_type (NautilusFileInfo *file_info); +gboolean nautilus_file_info_is_mime_type (NautilusFileInfo *file_info, + const char *mime_type); +gboolean nautilus_file_info_is_directory (NautilusFileInfo *file_info); +gboolean nautilus_file_info_can_write (NautilusFileInfo *file_info); /* Modifying the NautilusFileInfo */ -void nautilus_file_info_add_emblem (NautilusFileInfo *file, - const char *emblem_name); -char * nautilus_file_info_get_string_attribute (NautilusFileInfo *file, - const char *attribute_name); -void nautilus_file_info_add_string_attribute (NautilusFileInfo *file, - const char *attribute_name, - const char *value); +void nautilus_file_info_add_emblem (NautilusFileInfo *file_info, + const char *emblem_name); +char *nautilus_file_info_get_string_attribute (NautilusFileInfo *file_info, + const char *attribute_name); +void nautilus_file_info_add_string_attribute (NautilusFileInfo *file_info, + const char *attribute_name, + const char *value); /* Invalidating file info */ -void nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file); +void nautilus_file_info_invalidate_extension_info (NautilusFileInfo *file_info); NautilusFileInfo *nautilus_file_info_lookup (GFile *location); NautilusFileInfo *nautilus_file_info_create (GFile *location); diff --git a/libnautilus-extension/nautilus-info-provider.c b/libnautilus-extension/nautilus-info-provider.c index 359bf8e24..37e95b2b0 100644 --- a/libnautilus-extension/nautilus-info-provider.c +++ b/libnautilus-extension/nautilus-info-provider.c @@ -21,16 +21,16 @@ * */ -#include <config.h> #include "nautilus-info-provider.h" -#include <glib-object.h> +#include "nautilus-extension-enum-types.h" + +G_DEFINE_INTERFACE (NautilusInfoProvider, nautilus_info_provider, G_TYPE_OBJECT) /** * SECTION:nautilus-info-provider * @title: NautilusInfoProvider * @short_description: Interface to provide additional information about files - * @include: libnautilus-extension/nautilus-column-provider.h * * #NautilusInfoProvider allows extension to provide additional information about * files. When nautilus_info_provider_update_file_info() is called by the application, @@ -39,68 +39,46 @@ */ static void -nautilus_info_provider_base_init (gpointer g_class) -{ -} - -GType -nautilus_info_provider_get_type (void) +nautilus_info_provider_default_init (NautilusInfoProviderInterface *klass) { - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusInfoProviderIface), - nautilus_info_provider_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusInfoProvider", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } - - return type; } NautilusOperationResult -nautilus_info_provider_update_file_info (NautilusInfoProvider *provider, +nautilus_info_provider_update_file_info (NautilusInfoProvider *self, NautilusFileInfo *file, GClosure *update_complete, NautilusOperationHandle **handle) { - g_return_val_if_fail (NAUTILUS_IS_INFO_PROVIDER (provider), - NAUTILUS_OPERATION_FAILED); - g_return_val_if_fail (NAUTILUS_INFO_PROVIDER_GET_IFACE (provider)->update_file_info != NULL, + NautilusInfoProviderInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_INFO_PROVIDER (self), NAUTILUS_OPERATION_FAILED); g_return_val_if_fail (update_complete != NULL, NAUTILUS_OPERATION_FAILED); g_return_val_if_fail (handle != NULL, NAUTILUS_OPERATION_FAILED); - return NAUTILUS_INFO_PROVIDER_GET_IFACE (provider)->update_file_info - (provider, file, update_complete, handle); + iface = NAUTILUS_INFO_PROVIDER_GET_IFACE (self); + + g_return_val_if_fail (iface->update_file_info != NULL, + NAUTILUS_OPERATION_FAILED); + + return iface->update_file_info (self, file, update_complete, handle); } void -nautilus_info_provider_cancel_update (NautilusInfoProvider *provider, +nautilus_info_provider_cancel_update (NautilusInfoProvider *self, NautilusOperationHandle *handle) { - g_return_if_fail (NAUTILUS_IS_INFO_PROVIDER (provider)); - g_return_if_fail (NAUTILUS_INFO_PROVIDER_GET_IFACE (provider)->cancel_update != NULL); - g_return_if_fail (NAUTILUS_INFO_PROVIDER_GET_IFACE (provider)->cancel_update != NULL); + NautilusInfoProviderInterface *iface; + + g_return_if_fail (NAUTILUS_IS_INFO_PROVIDER (self)); g_return_if_fail (handle != NULL); - NAUTILUS_INFO_PROVIDER_GET_IFACE (provider)->cancel_update (provider, - handle); + iface = NAUTILUS_INFO_PROVIDER_GET_IFACE (self); + + g_return_if_fail (iface->cancel_update != NULL); + + iface->cancel_update (self, handle); } void diff --git a/libnautilus-extension/nautilus-info-provider.h b/libnautilus-extension/nautilus-info-provider.h index 6d70887e9..479f19b28 100644 --- a/libnautilus-extension/nautilus-info-provider.h +++ b/libnautilus-extension/nautilus-info-provider.h @@ -29,26 +29,63 @@ #ifndef NAUTILUS_INFO_PROVIDER_H #define NAUTILUS_INFO_PROVIDER_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> -#include "nautilus-extension-types.h" #include "nautilus-file-info.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_INFO_PROVIDER (nautilus_info_provider_get_type ()) -#define NAUTILUS_INFO_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_INFO_PROVIDER, NautilusInfoProvider)) -#define NAUTILUS_IS_INFO_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_INFO_PROVIDER)) -#define NAUTILUS_INFO_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_INFO_PROVIDER, NautilusInfoProviderIface)) +#define NAUTILUS_TYPE_INFO_PROVIDER (nautilus_info_provider_get_type ()) + +G_DECLARE_INTERFACE (NautilusInfoProvider, nautilus_info_provider, + NAUTILUS, INFO_PROVIDER, + GObject) + +/* For compatibility reasons, remove this once you start introducing breaking changes. */ +typedef NautilusInfoProviderInterface NautilusInfoProviderIface; + +/** + * NautilusOperationHandle: + * + * Handle for asynchronous interfaces. These are opaque handles that must + * be unique within an extension object. These are returned by operations + * that return #NAUTILUS_OPERATION_IN_PROGRESS. + */ +typedef struct _NautilusOperationHandle NautilusOperationHandle; + +/** + * NautilusOperationResult: + * @NAUTILUS_OPERATION_COMPLETE: the operation succeeded, and the extension + * is done with the request. + * @NAUTILUS_OPERATION_FAILED: the operation failed. + * @NAUTILUS_OPERATION_IN_PROGRESS: the extension has begin an async operation. + * When this value is returned, the extension must set the handle parameter + * and call the callback closure when the operation is complete. + * + * Return values for asynchronous operations performed by the extension. + * See nautilus_info_provider_update_file_info(). + */ +typedef enum +{ + /* Returned if the call succeeded, and the extension is done + * with the request */ + NAUTILUS_OPERATION_COMPLETE, + + /* Returned if the call failed */ + NAUTILUS_OPERATION_FAILED, -typedef struct _NautilusInfoProvider NautilusInfoProvider; -typedef struct _NautilusInfoProviderIface NautilusInfoProviderIface; + /* Returned if the extension has begun an async operation. + * If this is returned, the extension must set the handle + * parameter and call the callback closure when the + * operation is complete. */ + NAUTILUS_OPERATION_IN_PROGRESS +} NautilusOperationResult; -typedef void (*NautilusInfoProviderUpdateComplete) (NautilusInfoProvider *provider, - NautilusOperationHandle *handle, - NautilusOperationResult result, - gpointer user_data); /** - * NautilusInfoProviderIface: + * NautilusInfoProviderInterface: * @g_iface: The parent interface. * @update_file_info: Returns a #NautilusOperationResult. * See nautilus_info_provider_update_file_info() for details. @@ -57,33 +94,33 @@ typedef void (*NautilusInfoProviderUpdateComplete) (NautilusInfoProvider *pro * * Interface for extensions to provide additional information about files. */ -struct _NautilusInfoProviderIface { - GTypeInterface g_iface; - - NautilusOperationResult (*update_file_info) (NautilusInfoProvider *provider, - NautilusFileInfo *file, - GClosure *update_complete, - NautilusOperationHandle **handle); - void (*cancel_update) (NautilusInfoProvider *provider, - NautilusOperationHandle *handle); +struct _NautilusInfoProviderInterface +{ + GTypeInterface g_iface; + + NautilusOperationResult (*update_file_info) (NautilusInfoProvider *provider, + NautilusFileInfo *file, + GClosure *update_complete, + NautilusOperationHandle **handle); + void (*cancel_update) (NautilusInfoProvider *provider, + NautilusOperationHandle *handle); }; /* Interface Functions */ -GType nautilus_info_provider_get_type (void); NautilusOperationResult nautilus_info_provider_update_file_info (NautilusInfoProvider *provider, - NautilusFileInfo *file, - GClosure *update_complete, - NautilusOperationHandle **handle); + NautilusFileInfo *file, + GClosure *update_complete, + NautilusOperationHandle **handle); void nautilus_info_provider_cancel_update (NautilusInfoProvider *provider, - NautilusOperationHandle *handle); + NautilusOperationHandle *handle); /* Helper functions for implementations */ void nautilus_info_provider_update_complete_invoke (GClosure *update_complete, - NautilusInfoProvider *provider, - NautilusOperationHandle *handle, - NautilusOperationResult result); + NautilusInfoProvider *provider, + NautilusOperationHandle *handle, + NautilusOperationResult result); G_END_DECLS diff --git a/libnautilus-extension/nautilus-location-widget-provider.c b/libnautilus-extension/nautilus-location-widget-provider.c index a2e2af008..55f989741 100644 --- a/libnautilus-extension/nautilus-location-widget-provider.c +++ b/libnautilus-extension/nautilus-location-widget-provider.c @@ -21,55 +21,25 @@ * */ -#include <config.h> #include "nautilus-location-widget-provider.h" -#include <glib-object.h> +G_DEFINE_INTERFACE (NautilusLocationWidgetProvider, nautilus_location_widget_provider, + G_TYPE_OBJECT) /** * SECTION:nautilus-location-widget-provider * @title: NautilusLocationWidgetProvider * @short_description: Interface to provide additional location widgets - * @include: libnautilus-extension/nautilus-location-widget-provider.h * * #NautilusLocationWidgetProvider allows extension to provide additional location * widgets in the file manager views. */ static void -nautilus_location_widget_provider_base_init (gpointer g_class) +nautilus_location_widget_provider_default_init (NautilusLocationWidgetProviderInterface *klass) { } -GType -nautilus_location_widget_provider_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusLocationWidgetProviderIface), - nautilus_location_widget_provider_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusLocationWidgetProvider", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } - - return type; -} - /** * nautilus_location_widget_provider_get_widget: * @provider: a #NautilusLocationWidgetProvider @@ -79,12 +49,17 @@ nautilus_location_widget_provider_get_type (void) * Returns: (transfer none): the location widget for @provider at @uri */ GtkWidget * -nautilus_location_widget_provider_get_widget (NautilusLocationWidgetProvider *provider, +nautilus_location_widget_provider_get_widget (NautilusLocationWidgetProvider *self, const char *uri, GtkWidget *window) { - g_return_val_if_fail (NAUTILUS_IS_LOCATION_WIDGET_PROVIDER (provider), NULL); + NautilusLocationWidgetProviderInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_LOCATION_WIDGET_PROVIDER (self), NULL); + + iface = NAUTILUS_LOCATION_WIDGET_PROVIDER_GET_IFACE (self); + + g_return_val_if_fail (iface->get_widget != NULL, NULL); - return NAUTILUS_LOCATION_WIDGET_PROVIDER_GET_IFACE (provider)->get_widget - (provider, uri, window); + return iface->get_widget (self, uri, window); } diff --git a/libnautilus-extension/nautilus-location-widget-provider.h b/libnautilus-extension/nautilus-location-widget-provider.h index 8000b2c19..e95ca0523 100644 --- a/libnautilus-extension/nautilus-location-widget-provider.h +++ b/libnautilus-extension/nautilus-location-widget-provider.h @@ -31,41 +31,46 @@ #ifndef NAUTILUS_LOCATION_WIDGET_PROVIDER_H #define NAUTILUS_LOCATION_WIDGET_PROVIDER_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> #include <gtk/gtk.h> -#include "nautilus-extension-types.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER (nautilus_location_widget_provider_get_type ()) -#define NAUTILUS_LOCATION_WIDGET_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER, NautilusLocationWidgetProvider)) -#define NAUTILUS_IS_LOCATION_WIDGET_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER)) -#define NAUTILUS_LOCATION_WIDGET_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER, NautilusLocationWidgetProviderIface)) +#define NAUTILUS_TYPE_LOCATION_WIDGET_PROVIDER (nautilus_location_widget_provider_get_type ()) -typedef struct _NautilusLocationWidgetProvider NautilusLocationWidgetProvider; -typedef struct _NautilusLocationWidgetProviderIface NautilusLocationWidgetProviderIface; +G_DECLARE_INTERFACE (NautilusLocationWidgetProvider, nautilus_location_widget_provider, + NAUTILUS, LOCATION_WIDGET_PROVIDER, + GObject) + +/* For compatibility reasons, remove this once you start introducing breaking changes. */ +typedef NautilusLocationWidgetProviderInterface NautilusLocationWidgetProviderIface; /** - * NautilusLocationWidgetProviderIface: + * NautilusLocationWidgetProviderInterface: * @g_iface: The parent interface. * @get_widget: Returns a #GtkWidget. * See nautilus_location_widget_provider_get_widget() for details. * * Interface for extensions to provide additional location widgets. */ -struct _NautilusLocationWidgetProviderIface { - GTypeInterface g_iface; +struct _NautilusLocationWidgetProviderInterface +{ + GTypeInterface g_iface; - GtkWidget * (*get_widget) (NautilusLocationWidgetProvider *provider, - const char *uri, - GtkWidget *window); + GtkWidget *(*get_widget) (NautilusLocationWidgetProvider *provider, + const char *uri, + GtkWidget *window); }; /* Interface Functions */ -GType nautilus_location_widget_provider_get_type (void); -GtkWidget * nautilus_location_widget_provider_get_widget (NautilusLocationWidgetProvider *provider, - const char *uri, - GtkWidget *window); +GtkWidget *nautilus_location_widget_provider_get_widget (NautilusLocationWidgetProvider *provider, + const char *uri, + GtkWidget *window); + G_END_DECLS #endif diff --git a/libnautilus-extension/nautilus-menu-item.c b/libnautilus-extension/nautilus-menu-item.c index 068188a6b..85c8b8a72 100644 --- a/libnautilus-extension/nautilus-menu-item.c +++ b/libnautilus-extension/nautilus-menu-item.c @@ -25,6 +25,19 @@ #include <glib/gi18n-lib.h> #include "nautilus-menu.h" +typedef struct +{ + char *name; + char *label; + char *tip; + char *icon; + NautilusMenu *menu; + gboolean sensitive; + gboolean priority; +} NautilusMenuItemPrivate; + +G_DEFINE_TYPE_WITH_PRIVATE (NautilusMenuItem, nautilus_menu_item, G_TYPE_OBJECT) + enum { ACTIVATE, @@ -44,26 +57,12 @@ enum LAST_PROP }; -struct _NautilusMenuItemDetails -{ - char *name; - char *label; - char *tip; - char *icon; - NautilusMenu *menu; - gboolean sensitive; - gboolean priority; -}; - static guint signals[LAST_SIGNAL]; -static GObjectClass *parent_class = NULL; - /** * SECTION:nautilus-menu-item * @title: NautilusMenuItem * @short_description: Menu item descriptor object - * @include: libnautilus-extension/nautilus-menu-item.h * * #NautilusMenuItem is an object that describes an item in a file manager * menu. Extensions can provide #NautilusMenuItem objects by registering a @@ -113,9 +112,11 @@ nautilus_menu_item_new (const char *name, * emits the activate signal. */ void -nautilus_menu_item_activate (NautilusMenuItem *item) +nautilus_menu_item_activate (NautilusMenuItem *self) { - g_signal_emit (item, signals[ACTIVATE], 0); + g_return_if_fail (NAUTILUS_IS_MENU_ITEM (self)); + + g_signal_emit (self, signals[ACTIVATE], 0); } /** @@ -126,10 +127,12 @@ nautilus_menu_item_activate (NautilusMenuItem *item) * Attachs a menu to the given #NautilusMenuItem. */ void -nautilus_menu_item_set_submenu (NautilusMenuItem *item, +nautilus_menu_item_set_submenu (NautilusMenuItem *self, NautilusMenu *menu) { - g_object_set (item, "menu", menu, NULL); + g_return_if_fail (NAUTILUS_IS_MENU_ITEM (self)); + + g_object_set (self, "menu", menu, NULL); } static void @@ -139,50 +142,52 @@ nautilus_menu_item_get_property (GObject *object, GParamSpec *pspec) { NautilusMenuItem *item; + NautilusMenuItemPrivate *priv; item = NAUTILUS_MENU_ITEM (object); + priv = nautilus_menu_item_get_instance_private (item); switch (param_id) { case PROP_NAME: { - g_value_set_string (value, item->details->name); + g_value_set_string (value, priv->name); } break; case PROP_LABEL: { - g_value_set_string (value, item->details->label); + g_value_set_string (value, priv->label); } break; case PROP_TIP: { - g_value_set_string (value, item->details->tip); + g_value_set_string (value, priv->tip); } break; case PROP_ICON: { - g_value_set_string (value, item->details->icon); + g_value_set_string (value, priv->icon); } break; case PROP_SENSITIVE: { - g_value_set_boolean (value, item->details->sensitive); + g_value_set_boolean (value, priv->sensitive); } break; case PROP_PRIORITY: { - g_value_set_boolean (value, item->details->priority); + g_value_set_boolean (value, priv->priority); } break; case PROP_MENU: { - g_value_set_object (value, item->details->menu); + g_value_set_object (value, priv->menu); } break; @@ -201,64 +206,66 @@ nautilus_menu_item_set_property (GObject *object, GParamSpec *pspec) { NautilusMenuItem *item; + NautilusMenuItemPrivate *priv; item = NAUTILUS_MENU_ITEM (object); + priv = nautilus_menu_item_get_instance_private (item); switch (param_id) { case PROP_NAME: { - g_free (item->details->name); - item->details->name = g_strdup (g_value_get_string (value)); + g_free (priv->name); + priv->name = g_strdup (g_value_get_string (value)); g_object_notify (object, "name"); } break; case PROP_LABEL: { - g_free (item->details->label); - item->details->label = g_strdup (g_value_get_string (value)); + g_free (priv->label); + priv->label = g_strdup (g_value_get_string (value)); g_object_notify (object, "label"); } break; case PROP_TIP: { - g_free (item->details->tip); - item->details->tip = g_strdup (g_value_get_string (value)); + g_free (priv->tip); + priv->tip = g_strdup (g_value_get_string (value)); g_object_notify (object, "tip"); } break; case PROP_ICON: { - g_free (item->details->icon); - item->details->icon = g_strdup (g_value_get_string (value)); + g_free (priv->icon); + priv->icon = g_strdup (g_value_get_string (value)); g_object_notify (object, "icon"); } break; case PROP_SENSITIVE: { - item->details->sensitive = g_value_get_boolean (value); + priv->sensitive = g_value_get_boolean (value); g_object_notify (object, "sensitive"); } break; case PROP_PRIORITY: { - item->details->priority = g_value_get_boolean (value); + priv->priority = g_value_get_boolean (value); g_object_notify (object, "priority"); } break; case PROP_MENU: { - if (item->details->menu) + if (priv->menu) { - g_object_unref (item->details->menu); + g_object_unref (priv->menu); } - item->details->menu = g_object_ref (g_value_get_object (value)); + priv->menu = g_object_ref (g_value_get_object (value)); g_object_notify (object, "menu"); } break; @@ -275,36 +282,37 @@ static void nautilus_menu_item_finalize (GObject *object) { NautilusMenuItem *item; + NautilusMenuItemPrivate *priv; item = NAUTILUS_MENU_ITEM (object); + priv = nautilus_menu_item_get_instance_private (item); - g_free (item->details->name); - g_free (item->details->label); - g_free (item->details->tip); - g_free (item->details->icon); - if (item->details->menu) + g_free (priv->name); + g_free (priv->label); + g_free (priv->tip); + g_free (priv->icon); + if (priv->menu) { - g_object_unref (item->details->menu); + g_object_unref (priv->menu); } - g_free (item->details); - - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (nautilus_menu_item_parent_class)->finalize (object); } static void -nautilus_menu_item_instance_init (NautilusMenuItem *item) +nautilus_menu_item_init (NautilusMenuItem *self) { - item->details = g_new0 (NautilusMenuItemDetails, 1); - item->details->sensitive = TRUE; - item->details->menu = NULL; + NautilusMenuItemPrivate *priv; + + priv = nautilus_menu_item_get_instance_private (self); + + priv->sensitive = TRUE; + priv->menu = NULL; } static void nautilus_menu_item_class_init (NautilusMenuItemClass *class) { - parent_class = g_type_class_peek_parent (class); - G_OBJECT_CLASS (class)->finalize = nautilus_menu_item_finalize; G_OBJECT_CLASS (class)->get_property = nautilus_menu_item_get_property; G_OBJECT_CLASS (class)->set_property = nautilus_menu_item_set_property; @@ -370,32 +378,3 @@ nautilus_menu_item_class_init (NautilusMenuItemClass *class) NAUTILUS_TYPE_MENU, G_PARAM_READWRITE)); } - -GType -nautilus_menu_item_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusMenuItemClass), - NULL, - NULL, - (GClassInitFunc) nautilus_menu_item_class_init, - NULL, - NULL, - sizeof (NautilusMenuItem), - 0, - (GInstanceInitFunc) nautilus_menu_item_instance_init - }; - - type = g_type_register_static - (G_TYPE_OBJECT, - "NautilusMenuItem", - &info, 0); - } - - return type; -} diff --git a/libnautilus-extension/nautilus-menu-item.h b/libnautilus-extension/nautilus-menu-item.h index cc1b32ad6..9e867444b 100644 --- a/libnautilus-extension/nautilus-menu-item.h +++ b/libnautilus-extension/nautilus-menu-item.h @@ -24,6 +24,10 @@ #ifndef NAUTILUS_MENU_ITEM_H #define NAUTILUS_MENU_ITEM_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include "nautilus-menu.h" #endif diff --git a/libnautilus-extension/nautilus-menu-provider.c b/libnautilus-extension/nautilus-menu-provider.c index 05eb28a67..ead742bd7 100644 --- a/libnautilus-extension/nautilus-menu-provider.c +++ b/libnautilus-extension/nautilus-menu-provider.c @@ -25,64 +25,36 @@ #include <config.h> #include "nautilus-menu-provider.h" -#include <glib-object.h> +G_DEFINE_INTERFACE (NautilusMenuProvider, nautilus_menu_provider, G_TYPE_OBJECT) + +enum +{ + ITEMS_UPDATED, + LAST_SIGNAL +}; + +static guint signals[LAST_SIGNAL]; /** * SECTION:nautilus-menu-provider * @title: NautilusMenuProvider * @short_description: Interface to provide additional menu items - * @include: libnautilus-extension/nautilus-menu-provider.h * * #NautilusMenuProvider allows extension to provide additional menu items * in the file manager menus. */ static void -nautilus_menu_provider_base_init (gpointer g_class) +nautilus_menu_provider_default_init (NautilusMenuProviderInterface *klass) { - static gboolean initialized = FALSE; - - if (!initialized) - { - /* This signal should be emited each time the extension modify the list of menu items */ - g_signal_new ("items-updated", - NAUTILUS_TYPE_MENU_PROVIDER, - G_SIGNAL_RUN_LAST, - 0, - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - initialized = TRUE; - } -} - -GType -nautilus_menu_provider_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusMenuProviderIface), - nautilus_menu_provider_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusMenuProvider", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } - - return type; + /* This signal should be emited each time the extension modify the list of menu items */ + signals[ITEMS_UPDATED] = g_signal_new ("items-updated", + NAUTILUS_TYPE_MENU_PROVIDER, + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); } /** @@ -98,17 +70,19 @@ nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, GtkWidget *window, GList *files) { + NautilusMenuProviderInterface *iface; + + iface = NAUTILUS_MENU_PROVIDER_GET_IFACE (provider); + g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL); + g_return_val_if_fail (GTK_IS_WIDGET (window), NULL); - if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items) + if (iface->get_file_items != NULL) { - return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_file_items - (provider, window, files); - } - else - { - return NULL; + return iface->get_file_items (provider, window, files); } + + return NULL; } /** @@ -124,18 +98,20 @@ nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider, GtkWidget *window, NautilusFileInfo *current_folder) { + NautilusMenuProviderInterface *iface; + + iface = NAUTILUS_MENU_PROVIDER_GET_IFACE (provider); + g_return_val_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider), NULL); + g_return_val_if_fail (GTK_IS_WIDGET (window), NULL); g_return_val_if_fail (NAUTILUS_IS_FILE_INFO (current_folder), NULL); - if (NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items) + if (iface->get_background_items != NULL) { - return NAUTILUS_MENU_PROVIDER_GET_IFACE (provider)->get_background_items - (provider, window, current_folder); - } - else - { - return NULL; + return iface->get_background_items (provider, window, current_folder); } + + return NULL; } /* This function emit a signal to inform nautilus that its item list has changed */ @@ -144,5 +120,5 @@ nautilus_menu_provider_emit_items_updated_signal (NautilusMenuProvider *provider { g_return_if_fail (NAUTILUS_IS_MENU_PROVIDER (provider)); - g_signal_emit_by_name (provider, "items-updated"); + g_signal_emit (provider, ITEMS_UPDATED, 0); } diff --git a/libnautilus-extension/nautilus-menu-provider.h b/libnautilus-extension/nautilus-menu-provider.h index 23ff537be..bd887feaa 100644 --- a/libnautilus-extension/nautilus-menu-provider.h +++ b/libnautilus-extension/nautilus-menu-provider.h @@ -29,24 +29,27 @@ #ifndef NAUTILUS_MENU_PROVIDER_H #define NAUTILUS_MENU_PROVIDER_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> #include <gtk/gtk.h> -#include "nautilus-extension-types.h" #include "nautilus-file-info.h" -#include "nautilus-menu.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_MENU_PROVIDER (nautilus_menu_provider_get_type ()) -#define NAUTILUS_MENU_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_MENU_PROVIDER, NautilusMenuProvider)) -#define NAUTILUS_IS_MENU_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_MENU_PROVIDER)) -#define NAUTILUS_MENU_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_MENU_PROVIDER, NautilusMenuProviderIface)) +#define NAUTILUS_TYPE_MENU_PROVIDER (nautilus_menu_provider_get_type ()) + +G_DECLARE_INTERFACE (NautilusMenuProvider, nautilus_menu_provider, + NAUTILUS, MENU_PROVIDER, + GObject) -typedef struct _NautilusMenuProvider NautilusMenuProvider; -typedef struct _NautilusMenuProviderIface NautilusMenuProviderIface; +/* For compatibility reasons, remove this once you start introducing breaking changes. */ +typedef NautilusMenuProviderInterface NautilusMenuProviderIface; /** - * NautilusMenuProviderIface: + * NautilusMenuProviderInterface: * @g_iface: The parent interface. * @get_file_items: Returns a #GList of #NautilusMenuItem. * See nautilus_menu_provider_get_file_items() for details. @@ -55,28 +58,28 @@ typedef struct _NautilusMenuProviderIface NautilusMenuProviderIface; * * Interface for extensions to provide additional menu items. */ -struct _NautilusMenuProviderIface { - GTypeInterface g_iface; +struct _NautilusMenuProviderInterface +{ + GTypeInterface g_iface; - GList *(*get_file_items) (NautilusMenuProvider *provider, - GtkWidget *window, - GList *files); - GList *(*get_background_items) (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder); + GList *(*get_file_items) (NautilusMenuProvider *provider, + GtkWidget *window, + GList *files); + GList *(*get_background_items) (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); }; /* Interface Functions */ -GType nautilus_menu_provider_get_type (void); -GList *nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, - GtkWidget *window, - GList *files); -GList *nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider, - GtkWidget *window, - NautilusFileInfo *current_folder); +GList *nautilus_menu_provider_get_file_items (NautilusMenuProvider *provider, + GtkWidget *window, + GList *files); +GList *nautilus_menu_provider_get_background_items (NautilusMenuProvider *provider, + GtkWidget *window, + NautilusFileInfo *current_folder); /* This function emit a signal to inform nautilus that its item list has changed. */ -void nautilus_menu_provider_emit_items_updated_signal (NautilusMenuProvider *provider); +void nautilus_menu_provider_emit_items_updated_signal (NautilusMenuProvider *provider); G_END_DECLS diff --git a/libnautilus-extension/nautilus-menu.c b/libnautilus-extension/nautilus-menu.c index fcc2ecc4c..d4b5b3001 100644 --- a/libnautilus-extension/nautilus-menu.c +++ b/libnautilus-extension/nautilus-menu.c @@ -30,29 +30,29 @@ * SECTION:nautilus-menu * @title: NautilusMenu * @short_description: Menu descriptor object - * @include: libnautilus-extension/nautilus-menu.h * * #NautilusMenu is an object that describes a submenu in a file manager * menu. Extensions can provide #NautilusMenu objects by attaching them to * #NautilusMenuItem objects, using nautilus_menu_item_set_submenu(). */ -#define NAUTILUS_MENU_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NAUTILUS_TYPE_MENU, NautilusMenuPrivate)) -G_DEFINE_TYPE (NautilusMenu, nautilus_menu, G_TYPE_OBJECT); - -struct _NautilusMenuPrivate +struct _NautilusMenu { + GObject parent_instance; + GList *item_list; }; +G_DEFINE_TYPE (NautilusMenu, nautilus_menu, G_TYPE_OBJECT); + void -nautilus_menu_append_item (NautilusMenu *menu, - NautilusMenuItem *item) +nautilus_menu_append_item (NautilusMenu *self, + NautilusMenuItem *menu_item) { - g_return_if_fail (menu != NULL); - g_return_if_fail (item != NULL); + g_return_if_fail (NAUTILUS_IS_MENU (self)); + g_return_if_fail (NAUTILUS_IS_MENU_ITEM (menu_item)); - menu->priv->item_list = g_list_append (menu->priv->item_list, g_object_ref (item)); + self->item_list = g_list_append (self->item_list, g_object_ref (menu_item)); } /** @@ -62,13 +62,13 @@ nautilus_menu_append_item (NautilusMenu *menu, * Returns: (element-type NautilusMenuItem) (transfer full): the provided #NautilusMenuItem list */ GList * -nautilus_menu_get_items (NautilusMenu *menu) +nautilus_menu_get_items (NautilusMenu *self) { GList *item_list; - g_return_val_if_fail (menu != NULL, NULL); + g_return_val_if_fail (NAUTILUS_IS_MENU (self), NULL); - item_list = g_list_copy (menu->priv->item_list); + item_list = g_list_copy (self->item_list); g_list_foreach (item_list, (GFunc) g_object_ref, NULL); return item_list; @@ -95,20 +95,15 @@ nautilus_menu_finalize (GObject *object) { NautilusMenu *menu = NAUTILUS_MENU (object); - if (menu->priv->item_list) - { - g_list_free (menu->priv->item_list); - } + g_clear_pointer (&menu->item_list, g_list_free); G_OBJECT_CLASS (nautilus_menu_parent_class)->finalize (object); } static void -nautilus_menu_init (NautilusMenu *menu) +nautilus_menu_init (NautilusMenu *self) { - menu->priv = NAUTILUS_MENU_GET_PRIVATE (menu); - - menu->priv->item_list = NULL; + self->item_list = NULL; } static void @@ -116,8 +111,6 @@ nautilus_menu_class_init (NautilusMenuClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - g_type_class_add_private (klass, sizeof (NautilusMenuPrivate)); - object_class->finalize = nautilus_menu_finalize; } @@ -126,9 +119,5 @@ nautilus_menu_class_init (NautilusMenuClass *klass) NautilusMenu * nautilus_menu_new (void) { - NautilusMenu *obj; - - obj = NAUTILUS_MENU (g_object_new (NAUTILUS_TYPE_MENU, NULL)); - - return obj; + return g_object_new (NAUTILUS_TYPE_MENU, NULL); } diff --git a/libnautilus-extension/nautilus-menu.h b/libnautilus-extension/nautilus-menu.h index fd132be4e..efac9a0d1 100644 --- a/libnautilus-extension/nautilus-menu.h +++ b/libnautilus-extension/nautilus-menu.h @@ -26,80 +26,47 @@ #define NAUTILUS_MENU_H #include <glib-object.h> -#include "nautilus-extension-types.h" +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif G_BEGIN_DECLS -/* NautilusMenu defines */ -#define NAUTILUS_TYPE_MENU (nautilus_menu_get_type ()) -#define NAUTILUS_MENU(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_MENU, NautilusMenu)) -#define NAUTILUS_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_MENU, NautilusMenuClass)) -#define NAUTILUS_IS_MENU(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_MENU)) -#define NAUTILUS_IS_MENU_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), NAUTILUS_TYPE_MENU)) -#define NAUTILUS_MENU_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), NAUTILUS_TYPE_MENU, NautilusMenuClass)) -/* NautilusMenuItem defines */ -#define NAUTILUS_TYPE_MENU_ITEM (nautilus_menu_item_get_type()) -#define NAUTILUS_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_MENU_ITEM, NautilusMenuItem)) -#define NAUTILUS_MENU_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_MENU_ITEM, NautilusMenuItemClass)) -#define NAUTILUS_MENU_IS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_MENU_ITEM)) -#define NAUTILUS_MENU_IS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NAUTILUS_TYPE_MENU_ITEM)) -#define NAUTILUS_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), NAUTILUS_TYPE_MENU_ITEM, NautilusMenuItemClass)) - - -/* NautilusMenu types */ -typedef struct _NautilusMenu NautilusMenu; -typedef struct _NautilusMenuPrivate NautilusMenuPrivate; -typedef struct _NautilusMenuClass NautilusMenuClass; -/* NautilusMenuItem types */ -typedef struct _NautilusMenuItem NautilusMenuItem; -typedef struct _NautilusMenuItemDetails NautilusMenuItemDetails; -typedef struct _NautilusMenuItemClass NautilusMenuItemClass; - - -/* NautilusMenu structs */ -struct _NautilusMenu { - GObject parent; - NautilusMenuPrivate *priv; -}; +#define NAUTILUS_TYPE_MENU (nautilus_menu_get_type ()) +#define NAUTILUS_TYPE_MENU_ITEM (nautilus_menu_item_get_type ()) -struct _NautilusMenuClass { - GObjectClass parent_class; -}; +G_DECLARE_FINAL_TYPE (NautilusMenu, nautilus_menu, + NAUTILUS, MENU, + GObject) +G_DECLARE_DERIVABLE_TYPE (NautilusMenuItem, nautilus_menu_item, + NAUTILUS, MENU_ITEM, + GObject) -/* NautilusMenuItem structs */ -struct _NautilusMenuItem { - GObject parent; +struct _NautilusMenuItemClass +{ + GObjectClass parent; - NautilusMenuItemDetails *details; + void (*activate) (NautilusMenuItem *item); }; -struct _NautilusMenuItemClass { - GObjectClass parent; - - void (*activate) (NautilusMenuItem *item); -}; +NautilusMenu *nautilus_menu_new (void); +void nautilus_menu_append_item (NautilusMenu *menu, + NautilusMenuItem *item); +GList *nautilus_menu_get_items (NautilusMenu *menu); +void nautilus_menu_item_list_free (GList *item_list); -/* NautilusMenu methods */ -GType nautilus_menu_get_type (void); -NautilusMenu * nautilus_menu_new (void); -void nautilus_menu_append_item (NautilusMenu *menu, - NautilusMenuItem *item); -GList* nautilus_menu_get_items (NautilusMenu *menu); -void nautilus_menu_item_list_free (GList *item_list); +NautilusMenuItem *nautilus_menu_item_new (const char *name, + const char *label, + const char *tip, + const char *icon); -/* NautilusMenuItem methods */ -GType nautilus_menu_item_get_type (void); -NautilusMenuItem *nautilus_menu_item_new (const char *name, - const char *label, - const char *tip, - const char *icon); +void nautilus_menu_item_activate (NautilusMenuItem *item); +void nautilus_menu_item_set_submenu (NautilusMenuItem *item, + NautilusMenu *menu); -void nautilus_menu_item_activate (NautilusMenuItem *item); -void nautilus_menu_item_set_submenu (NautilusMenuItem *item, - NautilusMenu *menu); /* NautilusMenuItem has the following properties: * name (string) - the identifier for the menu item * label (string) - the user-visible label of the menu item diff --git a/libnautilus-extension/nautilus-property-page-provider.c b/libnautilus-extension/nautilus-property-page-provider.c index 7a7a13cf0..26ec03cf5 100644 --- a/libnautilus-extension/nautilus-property-page-provider.c +++ b/libnautilus-extension/nautilus-property-page-provider.c @@ -22,55 +22,25 @@ * */ -#include <config.h> #include "nautilus-property-page-provider.h" -#include <glib-object.h> +G_DEFINE_INTERFACE (NautilusPropertyPageProvider, nautilus_property_page_provider, + G_TYPE_OBJECT) /** * SECTION:nautilus-property-page-provider * @title: NautilusPropertyPageProvider * @short_description: Interface to provide additional property pages - * @include: libnautilus-extension/nautilus-property-page-provider.h * * #NautilusPropertyPageProvider allows extension to provide additional pages * for the file properties dialog. */ static void -nautilus_property_page_provider_base_init (gpointer g_class) +nautilus_property_page_provider_default_init (NautilusPropertyPageProviderInterface *klass) { } -GType -nautilus_property_page_provider_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusPropertyPageProviderIface), - nautilus_property_page_provider_base_init, - NULL, - NULL, - NULL, - NULL, - 0, - 0, - NULL - }; - - type = g_type_register_static (G_TYPE_INTERFACE, - "NautilusPropertyPageProvider", - &info, 0); - g_type_interface_add_prerequisite (type, G_TYPE_OBJECT); - } - - return type; -} - /** * nautilus_property_page_provider_get_pages: * @provider: a #NautilusPropertyPageProvider @@ -85,12 +55,16 @@ nautilus_property_page_provider_get_type (void) * Returns: (element-type NautilusPropertyPage) (transfer full): A #GList of allocated #NautilusPropertyPage items. */ GList * -nautilus_property_page_provider_get_pages (NautilusPropertyPageProvider *provider, +nautilus_property_page_provider_get_pages (NautilusPropertyPageProvider *self, GList *files) { - g_return_val_if_fail (NAUTILUS_IS_PROPERTY_PAGE_PROVIDER (provider), NULL); - g_return_val_if_fail (NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE (provider)->get_pages != NULL, NULL); + NautilusPropertyPageProviderInterface *iface; + + g_return_val_if_fail (NAUTILUS_IS_PROPERTY_PAGE_PROVIDER (self), NULL); + + iface = NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE (self); + + g_return_val_if_fail (iface->get_pages != NULL, NULL); - return NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE (provider)->get_pages - (provider, files); + return iface->get_pages (self, files); } diff --git a/libnautilus-extension/nautilus-property-page-provider.h b/libnautilus-extension/nautilus-property-page-provider.h index 1a3b36058..55b7742e7 100644 --- a/libnautilus-extension/nautilus-property-page-provider.h +++ b/libnautilus-extension/nautilus-property-page-provider.h @@ -30,40 +30,42 @@ #ifndef NAUTILUS_PROPERTY_PAGE_PROVIDER_H #define NAUTILUS_PROPERTY_PAGE_PROVIDER_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> -#include "nautilus-extension-types.h" -#include "nautilus-file-info.h" -#include "nautilus-property-page.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER (nautilus_property_page_provider_get_type ()) -#define NAUTILUS_PROPERTY_PAGE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER, NautilusPropertyPageProvider)) -#define NAUTILUS_IS_PROPERTY_PAGE_PROVIDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER)) -#define NAUTILUS_PROPERTY_PAGE_PROVIDER_GET_IFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER, NautilusPropertyPageProviderIface)) +#define NAUTILUS_TYPE_PROPERTY_PAGE_PROVIDER (nautilus_property_page_provider_get_type ()) + +G_DECLARE_INTERFACE (NautilusPropertyPageProvider, nautilus_property_page_provider, + NAUTILUS, PROPERTY_PAGE_PROVIDER, + GObject) -typedef struct _NautilusPropertyPageProvider NautilusPropertyPageProvider; -typedef struct _NautilusPropertyPageProviderIface NautilusPropertyPageProviderIface; +/* For compatibility reasons, remove this once you start introducing breaking changes. */ +typedef NautilusPropertyPageProviderInterface NautilusPropertyPageProviderIface; /** - * NautilusPropertyPageProviderIface: + * NautilusPropertyPageProviderInterface: * @g_iface: The parent interface. * @get_pages: Returns a #GList of #NautilusPropertyPage. * See nautilus_property_page_provider_get_pages() for details. * * Interface for extensions to provide additional property pages. */ -struct _NautilusPropertyPageProviderIface { - GTypeInterface g_iface; +struct _NautilusPropertyPageProviderInterface +{ + GTypeInterface g_iface; - GList *(*get_pages) (NautilusPropertyPageProvider *provider, - GList *files); + GList *(*get_pages) (NautilusPropertyPageProvider *provider, + GList *files); }; /* Interface Functions */ -GType nautilus_property_page_provider_get_type (void); -GList *nautilus_property_page_provider_get_pages (NautilusPropertyPageProvider *provider, - GList *files); +GList *nautilus_property_page_provider_get_pages (NautilusPropertyPageProvider *provider, + GList *files); G_END_DECLS diff --git a/libnautilus-extension/nautilus-property-page.c b/libnautilus-extension/nautilus-property-page.c index a1c9d3a87..ca81fc121 100644 --- a/libnautilus-extension/nautilus-property-page.c +++ b/libnautilus-extension/nautilus-property-page.c @@ -35,20 +35,21 @@ enum LAST_PROP }; -struct _NautilusPropertyPageDetails +struct _NautilusPropertyPage { + GObject parent_instance; + char *name; GtkWidget *label; GtkWidget *page; }; -static GObjectClass *parent_class = NULL; +G_DEFINE_TYPE (NautilusPropertyPage, nautilus_property_page, G_TYPE_OBJECT) /** * SECTION:nautilus-property-page * @title: NautilusPropertyPage * @short_description: Property page descriptor object - * @include: libnautilus-extension/nautilus-property-page.h * * #NautilusPropertyPage is an object that describes a page in the file * properties dialog. Extensions can provide #NautilusPropertyPage objects @@ -75,9 +76,8 @@ nautilus_property_page_new (const char *name, NautilusPropertyPage *page; g_return_val_if_fail (name != NULL, NULL); - g_return_val_if_fail (label != NULL && GTK_IS_WIDGET (label), NULL); - g_return_val_if_fail (page_widget != NULL && GTK_IS_WIDGET (page_widget), - NULL); + g_return_val_if_fail (GTK_IS_WIDGET (label), NULL); + g_return_val_if_fail (GTK_IS_WIDGET (page_widget), NULL); page = g_object_new (NAUTILUS_TYPE_PROPERTY_PAGE, "name", name, @@ -102,19 +102,19 @@ nautilus_property_page_get_property (GObject *object, { case PROP_NAME: { - g_value_set_string (value, page->details->name); + g_value_set_string (value, page->name); } break; case PROP_LABEL: { - g_value_set_object (value, page->details->label); + g_value_set_object (value, page->label); } break; case PROP_PAGE: { - g_value_set_object (value, page->details->page); + g_value_set_object (value, page->page); } break; @@ -140,32 +140,32 @@ nautilus_property_page_set_property (GObject *object, { case PROP_NAME: { - g_free (page->details->name); - page->details->name = g_strdup (g_value_get_string (value)); + g_free (page->name); + page->name = g_strdup (g_value_get_string (value)); g_object_notify (object, "name"); } break; case PROP_LABEL: { - if (page->details->label) + if (page->label) { - g_object_unref (page->details->label); + g_object_unref (page->label); } - page->details->label = g_object_ref (g_value_get_object (value)); + page->label = g_object_ref (g_value_get_object (value)); g_object_notify (object, "label"); } break; case PROP_PAGE: { - if (page->details->page) + if (page->page) { - g_object_unref (page->details->page); + g_object_unref (page->page); } - page->details->page = g_object_ref (g_value_get_object (value)); + page->page = g_object_ref (g_value_get_object (value)); g_object_notify (object, "page"); } break; @@ -185,15 +185,15 @@ nautilus_property_page_dispose (GObject *object) page = NAUTILUS_PROPERTY_PAGE (object); - if (page->details->label) + if (page->label) { - g_object_unref (page->details->label); - page->details->label = NULL; + g_object_unref (page->label); + page->label = NULL; } - if (page->details->page) + if (page->page) { - g_object_unref (page->details->page); - page->details->page = NULL; + g_object_unref (page->page); + page->page = NULL; } } @@ -204,24 +204,19 @@ nautilus_property_page_finalize (GObject *object) page = NAUTILUS_PROPERTY_PAGE (object); - g_free (page->details->name); - - g_free (page->details); + g_free (page->name); - G_OBJECT_CLASS (parent_class)->finalize (object); + G_OBJECT_CLASS (nautilus_property_page_parent_class)->finalize (object); } static void -nautilus_property_page_instance_init (NautilusPropertyPage *page) +nautilus_property_page_init (NautilusPropertyPage *page) { - page->details = g_new0 (NautilusPropertyPageDetails, 1); } static void nautilus_property_page_class_init (NautilusPropertyPageClass *class) { - parent_class = g_type_class_peek_parent (class); - G_OBJECT_CLASS (class)->finalize = nautilus_property_page_finalize; G_OBJECT_CLASS (class)->dispose = nautilus_property_page_dispose; G_OBJECT_CLASS (class)->get_property = nautilus_property_page_get_property; @@ -249,32 +244,3 @@ nautilus_property_page_class_init (NautilusPropertyPageClass *class) GTK_TYPE_WIDGET, G_PARAM_READWRITE)); } - -GType -nautilus_property_page_get_type (void) -{ - static GType type = 0; - - if (!type) - { - const GTypeInfo info = - { - sizeof (NautilusPropertyPageClass), - NULL, - NULL, - (GClassInitFunc) nautilus_property_page_class_init, - NULL, - NULL, - sizeof (NautilusPropertyPage), - 0, - (GInstanceInitFunc) nautilus_property_page_instance_init - }; - - type = g_type_register_static - (G_TYPE_OBJECT, - "NautilusPropertyPage", - &info, 0); - } - - return type; -} diff --git a/libnautilus-extension/nautilus-property-page.h b/libnautilus-extension/nautilus-property-page.h index da8d44cb5..483df7c72 100644 --- a/libnautilus-extension/nautilus-property-page.h +++ b/libnautilus-extension/nautilus-property-page.h @@ -24,39 +24,24 @@ #ifndef NAUTILUS_PROPERTY_PAGE_H #define NAUTILUS_PROPERTY_PAGE_H +#if !defined (NAUTILUS_EXTENSION_H) && !defined (NAUTILUS_COMPILATION) +#warning "Only <nautilus-extension.h> should be included directly." +#endif + #include <glib-object.h> #include <gtk/gtk.h> -#include "nautilus-extension-types.h" G_BEGIN_DECLS -#define NAUTILUS_TYPE_PROPERTY_PAGE (nautilus_property_page_get_type()) -#define NAUTILUS_PROPERTY_PAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NAUTILUS_TYPE_PROPERTY_PAGE, NautilusPropertyPage)) -#define NAUTILUS_PROPERTY_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_PROPERTY_PAGE, NautilusPropertyPageClass)) -#define NAUTILUS_IS_PROPERTY_PAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NAUTILUS_TYPE_PROPERTY_PAGE)) -#define NAUTILUS_IS_PROPERTY_PAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), NAUTILUS_TYPE_PROPERTY_PAGE)) -#define NAUTILUS_PROPERTY_PAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), NAUTILUS_TYPE_PROPERTY_PAGE, NautilusPropertyPageClass)) - -typedef struct _NautilusPropertyPage NautilusPropertyPage; -typedef struct _NautilusPropertyPageDetails NautilusPropertyPageDetails; -typedef struct _NautilusPropertyPageClass NautilusPropertyPageClass; - -struct _NautilusPropertyPage -{ - GObject parent; - - NautilusPropertyPageDetails *details; -}; +#define NAUTILUS_TYPE_PROPERTY_PAGE (nautilus_property_page_get_type ()) -struct _NautilusPropertyPageClass -{ - GObjectClass parent; -}; +G_DECLARE_FINAL_TYPE (NautilusPropertyPage, nautilus_property_page, + NAUTILUS, PROPERTY_PAGE, + GObject) -GType nautilus_property_page_get_type (void); -NautilusPropertyPage *nautilus_property_page_new (const char *name, - GtkWidget *label, - GtkWidget *page); +NautilusPropertyPage *nautilus_property_page_new (const char *name, + GtkWidget *label, + GtkWidget *page); /* NautilusPropertyPage has the following properties: * name (string) - the identifier for the property page diff --git a/src/nautilus-application.c b/src/nautilus-application.c index 61d980863..a73b77363 100644 --- a/src/nautilus-application.c +++ b/src/nautilus-application.c @@ -50,7 +50,8 @@ #include "nautilus-profile.h" #include "nautilus-signaller.h" #include "nautilus-ui-utilities.h" -#include <libnautilus-extension/nautilus-menu-provider.h> + +#include <nautilus-extension.h> #define DEBUG_FLAG NAUTILUS_DEBUG_APPLICATION #include "nautilus-debug.h" diff --git a/src/nautilus-column-chooser.c b/src/nautilus-column-chooser.c index 24a77386e..ba05b5924 100644 --- a/src/nautilus-column-chooser.c +++ b/src/nautilus-column-chooser.c @@ -26,6 +26,8 @@ #include <gtk/gtk.h> #include <glib/gi18n.h> +#include <nautilus-extension.h> + #include "nautilus-column-utilities.h" struct _NautilusColumnChooser diff --git a/src/nautilus-column-utilities.c b/src/nautilus-column-utilities.c index 22789938b..7f00fa95f 100644 --- a/src/nautilus-column-utilities.c +++ b/src/nautilus-column-utilities.c @@ -25,7 +25,7 @@ #include <string.h> #include <eel/eel-glib-extensions.h> #include <glib/gi18n.h> -#include <libnautilus-extension/nautilus-column-provider.h> +#include <nautilus-extension.h> #include "nautilus-module.h" static const char *default_column_order[] = diff --git a/src/nautilus-column-utilities.h b/src/nautilus-column-utilities.h index 83e392812..6d07aa3e5 100644 --- a/src/nautilus-column-utilities.h +++ b/src/nautilus-column-utilities.h @@ -23,7 +23,6 @@ #ifndef NAUTILUS_COLUMN_UTILITIES_H #define NAUTILUS_COLUMN_UTILITIES_H -#include <libnautilus-extension/nautilus-column.h> #include "nautilus-file.h" GList *nautilus_get_all_columns (void); diff --git a/src/nautilus-desktop-item-properties.c b/src/nautilus-desktop-item-properties.c index 558cfbfc9..89965121b 100644 --- a/src/nautilus-desktop-item-properties.c +++ b/src/nautilus-desktop-item-properties.c @@ -29,8 +29,7 @@ #include <eel/eel-glib-extensions.h> #include <gtk/gtk.h> #include <glib/gi18n.h> -#include <libnautilus-extension/nautilus-extension-types.h> -#include <libnautilus-extension/nautilus-file-info.h> +#include <nautilus-extension.h> #include "nautilus-file.h" #include "nautilus-file-attributes.h" diff --git a/src/nautilus-directory-private.h b/src/nautilus-directory-private.h index a7d8c7a8e..f60387049 100644 --- a/src/nautilus-directory-private.h +++ b/src/nautilus-directory-private.h @@ -25,7 +25,7 @@ #include "nautilus-file-queue.h" #include "nautilus-file.h" #include "nautilus-monitor.h" -#include <libnautilus-extension/nautilus-info-provider.h> +#include <nautilus-extension.h> #include <libxml/tree.h> typedef struct LinkInfoReadState LinkInfoReadState; diff --git a/src/nautilus-file.c b/src/nautilus-file.c index bbbb20df5..496cbefaf 100644 --- a/src/nautilus-file.c +++ b/src/nautilus-file.c @@ -54,9 +54,8 @@ #include <glib.h> #include <gnome-autoar/gnome-autoar.h> #include <gdesktop-enums.h> -#include <libnautilus-extension/nautilus-file-info.h> -#include <libnautilus-extension/nautilus-extension-private.h> #include <libxml/parser.h> +#include <libnautilus-extension/nautilus-extension-private.h> #include <pwd.h> #include <stdlib.h> #include <sys/time.h> @@ -162,7 +161,7 @@ static GQuark attribute_name_q, attribute_free_space_q, attribute_favorite_q; -static void nautilus_file_info_iface_init (NautilusFileInfoIface *iface); +static void nautilus_file_info_iface_init (NautilusFileInfoInterface *iface); static char *nautilus_file_get_owner_as_string (NautilusFile *file, gboolean include_real_name); static char *nautilus_file_get_type_as_string (NautilusFile *file); @@ -711,7 +710,7 @@ nautilus_file_new_from_info (NautilusDirectory *directory, return file; } -static NautilusFile * +static NautilusFileInfo * nautilus_file_get_internal (GFile *location, gboolean create) { @@ -782,45 +781,39 @@ nautilus_file_get_internal (GFile *location, g_free (basename); nautilus_directory_unref (directory); - return file; + return NAUTILUS_FILE_INFO (file); } NautilusFile * nautilus_file_get (GFile *location) { - return nautilus_file_get_internal (location, TRUE); + return NAUTILUS_FILE (nautilus_file_get_internal (location, TRUE)); } NautilusFile * nautilus_file_get_existing (GFile *location) { - return nautilus_file_get_internal (location, FALSE); + return NAUTILUS_FILE (nautilus_file_get_internal (location, FALSE)); } NautilusFile * nautilus_file_get_existing_by_uri (const char *uri) { - GFile *location; - NautilusFile *file; + g_autoptr (GFile) location = NULL; location = g_file_new_for_uri (uri); - file = nautilus_file_get_internal (location, FALSE); - g_object_unref (location); - return file; + return nautilus_file_get_existing (location); } NautilusFile * nautilus_file_get_by_uri (const char *uri) { - GFile *location; - NautilusFile *file; + g_autoptr (GFile) location = NULL; location = g_file_new_for_uri (uri); - file = nautilus_file_get_internal (location, TRUE); - g_object_unref (location); - return file; + return nautilus_file_get (location); } gboolean @@ -1017,41 +1010,29 @@ nautilus_file_get_parent_uri_for_display (NautilusFile *file) char * nautilus_file_get_parent_uri (NautilusFile *file) { - g_assert (NAUTILUS_IS_FILE (file)); - - if (nautilus_file_is_self_owned (file)) - { - /* Callers expect an empty string, not a NULL. */ - return g_strdup (""); - } + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - return nautilus_directory_get_uri (file->details->directory); + return nautilus_file_info_get_parent_uri (NAUTILUS_FILE_INFO (file)); } GFile * nautilus_file_get_parent_location (NautilusFile *file) { - g_assert (NAUTILUS_IS_FILE (file)); - - if (nautilus_file_is_self_owned (file)) - { - return NULL; - } + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - return nautilus_directory_get_location (file->details->directory); + return nautilus_file_info_get_parent_location (NAUTILUS_FILE_INFO (file)); } NautilusFile * nautilus_file_get_parent (NautilusFile *file) { - g_assert (NAUTILUS_IS_FILE (file)); + NautilusFileInfo *file_info; - if (nautilus_file_is_self_owned (file)) - { - return NULL; - } + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + + file_info = NAUTILUS_FILE_INFO (file); - return nautilus_directory_get_corresponding_file (file->details->directory); + return NAUTILUS_FILE (nautilus_file_info_get_parent_info (file_info)); } /** @@ -1091,7 +1072,7 @@ nautilus_file_can_write (NautilusFile *file) { g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); - return file->details->can_write; + return nautilus_file_info_can_write (NAUTILUS_FILE_INFO (file)); } /** @@ -1744,57 +1725,26 @@ nautilus_file_can_trash (NautilusFile *file) GFile * nautilus_file_get_location (NautilusFile *file) { - g_autoptr (GFile) location = NULL; - g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - location = nautilus_directory_get_location (file->details->directory); - - if (nautilus_file_is_self_owned (file)) - { - return g_object_ref (location); - } - - return g_file_get_child (location, eel_ref_str_peek (file->details->name)); + return nautilus_file_info_get_location (NAUTILUS_FILE_INFO (file)); } /* Return the actual uri associated with the passed-in file. */ char * nautilus_file_get_uri (NautilusFile *file) { - char *uri; - GFile *loc; - g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - loc = nautilus_file_get_location (file); - uri = g_file_get_uri (loc); - g_object_unref (loc); - - return uri; + return nautilus_file_info_get_uri (NAUTILUS_FILE_INFO (file)); } char * nautilus_file_get_uri_scheme (NautilusFile *file) { - g_autoptr (GFile) location = NULL; - char *scheme; - g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - if (file->details->directory == NULL) - { - return NULL; - } - - location = nautilus_directory_get_location (file->details->directory); - if (location == NULL) - { - return NULL; - } - scheme = g_file_get_uri_scheme (location); - - return scheme; + return nautilus_file_info_get_uri_scheme (NAUTILUS_FILE_INFO (file)); } @@ -4603,7 +4553,9 @@ nautilus_file_get_edit_name (NautilusFile *file) char * nautilus_file_get_name (NautilusFile *file) { - return g_strdup (eel_ref_str_peek (file->details->name)); + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + + return nautilus_file_info_get_name (NAUTILUS_FILE_INFO (file)); } /** @@ -4671,12 +4623,7 @@ nautilus_file_get_activation_uri (NautilusFile *file) { g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - if (file->details->activation_uri != NULL) - { - return g_strdup (file->details->activation_uri); - } - - return nautilus_file_get_uri (file); + return nautilus_file_info_get_uri (NAUTILUS_FILE_INFO (file)); } GFile * @@ -7507,7 +7454,9 @@ char * nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_name) { - return nautilus_file_get_string_attribute_q (file, g_quark_from_string (attribute_name)); + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + + return nautilus_file_info_get_string_attribute (NAUTILUS_FILE_INFO (file), attribute_name); } @@ -7819,12 +7768,9 @@ nautilus_file_get_detailed_type_as_string (NautilusFile *file) GFileType nautilus_file_get_file_type (NautilusFile *file) { - if (file == NULL) - { - return G_FILE_TYPE_UNKNOWN; - } + g_return_val_if_fail (NAUTILUS_IS_FILE (file), G_FILE_TYPE_UNKNOWN); - return file->details->type; + return nautilus_file_info_get_file_type (NAUTILUS_FILE_INFO (file));; } /** @@ -7839,15 +7785,9 @@ nautilus_file_get_file_type (NautilusFile *file) char * nautilus_file_get_mime_type (NautilusFile *file) { - if (file != NULL) - { - g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); - if (file->details->mime_type != NULL) - { - return g_strdup (eel_ref_str_peek (file->details->mime_type)); - } - } - return g_strdup ("application/octet-stream"); + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + + return nautilus_file_info_get_mime_type (NAUTILUS_FILE_INFO (file)); } /** @@ -7869,12 +7809,7 @@ nautilus_file_is_mime_type (NautilusFile *file, g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); g_return_val_if_fail (mime_type != NULL, FALSE); - if (file->details->mime_type == NULL) - { - return FALSE; - } - return g_content_type_is_a (eel_ref_str_peek (file->details->mime_type), - mime_type); + return nautilus_file_info_is_mime_type (NAUTILUS_FILE_INFO (file), mime_type); } char * @@ -7930,11 +7865,9 @@ nautilus_file_is_symbolic_link (NautilusFile *file) GMount * nautilus_file_get_mount (NautilusFile *file) { - if (file->details->mount) - { - return g_object_ref (file->details->mount); - } - return NULL; + g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL); + + return nautilus_file_info_get_mount (NAUTILUS_FILE_INFO (file)); } static void @@ -8204,7 +8137,9 @@ nautilus_file_is_regular_file (NautilusFile *file) gboolean nautilus_file_is_directory (NautilusFile *file) { - return nautilus_file_get_file_type (file) == G_FILE_TYPE_DIRECTORY; + g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); + + return nautilus_file_info_is_directory (NAUTILUS_FILE_INFO (file)); } /** @@ -8614,7 +8549,7 @@ nautilus_file_is_gone (NautilusFile *file) { g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE); - return file->details->is_gone; + return nautilus_file_info_is_gone (NAUTILUS_FILE_INFO (file)); } /** @@ -9521,66 +9456,6 @@ nautilus_file_class_init (NautilusFileClass *class) NULL); } -static void -nautilus_file_add_emblem (NautilusFile *file, - const char *emblem_name) -{ - if (file->details->pending_info_providers) - { - file->details->pending_extension_emblems = g_list_prepend (file->details->pending_extension_emblems, - g_strdup (emblem_name)); - } - else - { - file->details->extension_emblems = g_list_prepend (file->details->extension_emblems, - g_strdup (emblem_name)); - } - - nautilus_file_changed (file); -} - -static void -nautilus_file_add_string_attribute (NautilusFile *file, - const char *attribute_name, - const char *value) -{ - if (file->details->pending_info_providers) - { - /* Lazily create hashtable */ - if (!file->details->pending_extension_attributes) - { - file->details->pending_extension_attributes = - g_hash_table_new_full (g_direct_hash, g_direct_equal, - NULL, - (GDestroyNotify) g_free); - } - g_hash_table_insert (file->details->pending_extension_attributes, - GINT_TO_POINTER (g_quark_from_string (attribute_name)), - g_strdup (value)); - } - else - { - if (!file->details->extension_attributes) - { - file->details->extension_attributes = - g_hash_table_new_full (g_direct_hash, g_direct_equal, - NULL, - (GDestroyNotify) g_free); - } - g_hash_table_insert (file->details->extension_attributes, - GINT_TO_POINTER (g_quark_from_string (attribute_name)), - g_strdup (value)); - } - - nautilus_file_changed (file); -} - -static void -nautilus_file_invalidate_extension_info (NautilusFile *file) -{ - nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO); -} - void nautilus_file_info_providers_done (NautilusFile *file) { @@ -9710,28 +9585,327 @@ nautilus_drag_can_accept_info (NautilusFile *drop_target_item, } } +static gboolean +is_gone (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return file->details->is_gone; +} + +static char * +get_name (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return g_strdup (eel_ref_str_peek (file->details->name)); +} + +static char * +get_uri (NautilusFileInfo *file_info) +{ + NautilusFile *file; + g_autoptr (GFile) location = NULL; + + file = NAUTILUS_FILE (file_info); + location = nautilus_file_get_location (file); + + return g_file_get_uri (location); +} + +static char * +get_parent_uri (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (nautilus_file_is_self_owned (file)) + { + /* Callers expect an empty string, not a NULL. */ + return g_strdup (""); + } + + return nautilus_directory_get_uri (file->details->directory); +} + +static char * +get_uri_scheme (NautilusFileInfo *file_info) +{ + NautilusFile *file; + g_autoptr (GFile) location = NULL; + + file = NAUTILUS_FILE (file_info); + + if (file->details->directory == NULL) + { + return NULL; + } + + location = nautilus_directory_get_location (file->details->directory); + if (location == NULL) + { + return NULL; + } + + return g_file_get_uri_scheme (location); +} + +static char * +get_mime_type (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->mime_type != NULL) + { + return g_strdup (eel_ref_str_peek (file->details->mime_type)); + } + + return g_strdup ("application/octet-stream"); +} + +static gboolean +is_mime_type (NautilusFileInfo *file_info, + const char *mime_type) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->mime_type == NULL) + { + return FALSE; + } + + return g_content_type_is_a (eel_ref_str_peek (file->details->mime_type), mime_type); +} + +static gboolean +is_directory (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return nautilus_file_get_file_type (file) == G_FILE_TYPE_DIRECTORY; +} + +static void +add_emblem (NautilusFileInfo *file_info, + const char *emblem_name) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->pending_info_providers) + { + file->details->pending_extension_emblems = g_list_prepend (file->details->pending_extension_emblems, + g_strdup (emblem_name)); + } + else + { + file->details->extension_emblems = g_list_prepend (file->details->extension_emblems, + g_strdup (emblem_name)); + } + + nautilus_file_changed (file); +} + +static char * +get_string_attribute (NautilusFileInfo *file_info, + const char *attribute_name) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return nautilus_file_get_string_attribute_q (file, g_quark_from_string (attribute_name)); +} + +static void +add_string_attribute (NautilusFileInfo *file_info, + const char *attribute_name, + const char *value) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->pending_info_providers != NULL) + { + /* Lazily create hashtable */ + if (file->details->pending_extension_attributes == NULL) + { + file->details->pending_extension_attributes = + g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, + (GDestroyNotify) g_free); + } + g_hash_table_insert (file->details->pending_extension_attributes, + GINT_TO_POINTER (g_quark_from_string (attribute_name)), + g_strdup (value)); + } + else + { + if (file->details->extension_attributes == NULL) + { + file->details->extension_attributes = + g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, + (GDestroyNotify) g_free); + } + g_hash_table_insert (file->details->extension_attributes, + GINT_TO_POINTER (g_quark_from_string (attribute_name)), + g_strdup (value)); + } + + nautilus_file_changed (file); +} + +static void +invalidate_extension_info (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO); +} + +static char * +get_activation_uri (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->activation_uri != NULL) + { + return g_strdup (file->details->activation_uri); + } + + return nautilus_file_get_uri (file); +} + +static GFileType +get_file_type (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return file->details->type; +} + +static GFile * +get_location (NautilusFileInfo *file_info) +{ + NautilusFile *file; + g_autoptr (GFile) location = NULL; + + file = NAUTILUS_FILE (file_info); + location = nautilus_directory_get_location (file->details->directory); + + if (nautilus_file_is_self_owned (file)) + { + return g_object_ref (location); + } + + return g_file_get_child (location, eel_ref_str_peek (file->details->name)); +} + +static GFile * +get_parent_location (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (nautilus_file_is_self_owned (file)) + { + return NULL; + } + + return nautilus_directory_get_location (file->details->directory); +} + +static NautilusFileInfo * +get_parent_info (NautilusFileInfo *file_info) +{ + NautilusFile *file; + NautilusFile *parent_file; + + file = NAUTILUS_FILE (file_info); + + if (nautilus_file_is_self_owned (file)) + { + return NULL; + } + + parent_file = nautilus_directory_get_corresponding_file (file->details->directory); + + return NAUTILUS_FILE_INFO (parent_file); +} + +static GMount * +get_mount (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + if (file->details->mount) + { + return g_object_ref (file->details->mount); + } + + return NULL; +} + +static gboolean +can_write (NautilusFileInfo *file_info) +{ + NautilusFile *file; + + file = NAUTILUS_FILE (file_info); + + return file->details->can_write; +} + static void -nautilus_file_info_iface_init (NautilusFileInfoIface *iface) -{ - iface->is_gone = nautilus_file_is_gone; - iface->get_name = nautilus_file_get_name; - iface->get_file_type = nautilus_file_get_file_type; - iface->get_location = nautilus_file_get_location; - iface->get_uri = nautilus_file_get_uri; - iface->get_parent_location = nautilus_file_get_parent_location; - iface->get_parent_uri = nautilus_file_get_parent_uri; - iface->get_parent_info = nautilus_file_get_parent; - iface->get_mount = nautilus_file_get_mount; - iface->get_uri_scheme = nautilus_file_get_uri_scheme; - iface->get_activation_uri = nautilus_file_get_activation_uri; - iface->get_mime_type = nautilus_file_get_mime_type; - iface->is_mime_type = nautilus_file_is_mime_type; - iface->is_directory = nautilus_file_is_directory; - iface->can_write = nautilus_file_can_write; - iface->add_emblem = nautilus_file_add_emblem; - iface->get_string_attribute = nautilus_file_get_string_attribute; - iface->add_string_attribute = nautilus_file_add_string_attribute; - iface->invalidate_extension_info = nautilus_file_invalidate_extension_info; +nautilus_file_info_iface_init (NautilusFileInfoInterface *iface) +{ + iface->is_gone = is_gone; + + iface->get_name = get_name; + iface->get_uri = get_uri; + iface->get_parent_uri = get_parent_uri; + iface->get_uri_scheme = get_uri_scheme; + + iface->get_mime_type = get_mime_type; + iface->is_mime_type = is_mime_type; + iface->is_directory = is_directory; + + iface->add_emblem = add_emblem; + iface->get_string_attribute = get_string_attribute; + iface->add_string_attribute = add_string_attribute; + iface->invalidate_extension_info = invalidate_extension_info; + + iface->get_activation_uri = get_activation_uri; + + iface->get_file_type = get_file_type; + iface->get_location = get_location; + iface->get_parent_location = get_parent_location; + iface->get_parent_info = get_parent_info; + iface->get_mount = get_mount; + iface->can_write = can_write; } #if !defined (NAUTILUS_OMIT_SELF_CHECK) diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 7937bed31..ec86d7961 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -62,7 +62,7 @@ #include <eel/eel-string.h> #include <eel/eel-vfs-extensions.h> -#include <libnautilus-extension/nautilus-menu-provider.h> +#include <nautilus-extension.h> #include "nautilus-clipboard.h" #include "nautilus-search-directory.h" #include "nautilus-favorite-directory.h" @@ -4814,12 +4814,14 @@ get_extension_background_menu_items (NautilusFilesView *view) for (l = providers; l != NULL; l = l->next) { NautilusMenuProvider *provider; + NautilusFileInfo *file_info; GList *file_items; provider = NAUTILUS_MENU_PROVIDER (l->data); + file_info = NAUTILUS_FILE_INFO (priv->directory_as_file); file_items = nautilus_menu_provider_get_background_items (provider, GTK_WIDGET (window), - priv->directory_as_file); + file_info); items = g_list_concat (items, file_items); } diff --git a/src/nautilus-list-model.h b/src/nautilus-list-model.h index f44be9957..9f00dd198 100644 --- a/src/nautilus-list-model.h +++ b/src/nautilus-list-model.h @@ -24,7 +24,7 @@ #include <gdk/gdk.h> #include "nautilus-file.h" #include "nautilus-directory.h" -#include <libnautilus-extension/nautilus-column.h> +#include <nautilus-extension.h> #ifndef NAUTILUS_LIST_MODEL_H #define NAUTILUS_LIST_MODEL_H diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c index 6ad2a4260..8f226b6e2 100644 --- a/src/nautilus-list-view.c +++ b/src/nautilus-list-view.c @@ -44,7 +44,6 @@ #include <glib/gi18n.h> #include <glib-object.h> #include <libgd/gd.h> -#include <libnautilus-extension/nautilus-column-provider.h> #include "nautilus-column-chooser.h" #include "nautilus-column-utilities.h" #include "nautilus-dnd.h" diff --git a/src/nautilus-preferences-window.c b/src/nautilus-preferences-window.c index 36937f5f5..cbe817f08 100644 --- a/src/nautilus-preferences-window.c +++ b/src/nautilus-preferences-window.c @@ -34,6 +34,8 @@ #include <eel/eel-glib-extensions.h> +#include <nautilus-extension.h> + #include "nautilus-column-chooser.h" #include "nautilus-column-utilities.h" #include "nautilus-global-preferences.h" diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c index 9f6571054..14302204c 100644 --- a/src/nautilus-properties-window.c +++ b/src/nautilus-properties-window.c @@ -44,7 +44,7 @@ #include <eel/eel-string.h> #include <eel/eel-vfs-extensions.h> -#include <libnautilus-extension/nautilus-property-page-provider.h> +#include <nautilus-extension.h> #include "nautilus-file-attributes.h" #include "nautilus-file-operations.h" #include "nautilus-file-utilities.h" diff --git a/src/nautilus-ui-utilities.h b/src/nautilus-ui-utilities.h index ce949483f..dd8471c51 100644 --- a/src/nautilus-ui-utilities.h +++ b/src/nautilus-ui-utilities.h @@ -23,7 +23,6 @@ #define NAUTILUS_UI_UTILITIES_H #include <gtk/gtk.h> -#include <libnautilus-extension/nautilus-menu-item.h> void nautilus_gmenu_add_item_in_submodel (GMenu *menu, diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c index b8452e817..f3e42c47b 100644 --- a/src/nautilus-window-slot.c +++ b/src/nautilus-window-slot.c @@ -43,7 +43,7 @@ #include "nautilus-module.h" #include "nautilus-monitor.h" #include "nautilus-profile.h" -#include <libnautilus-extension/nautilus-location-widget-provider.h> +#include <nautilus-extension.h> #include "nautilus-ui-utilities.h" #include <eel/eel-vfs-extensions.h> |