[nautilus-actions] Desktop file: read/write icon and enabled status



commit 279616737f8a3cee2f47aef748bb15241bd906eb
Author: Pierre Wieser <pwieser trychlos org>
Date:   Mon Dec 7 20:29:23 2009 +0100

    Desktop file: read/write icon and enabled status

 ChangeLog                                          |   12 +++
 .../io-provider-desktop/nadp-desktop-file.c        |   96 ++++++++++++++++++++
 .../io-provider-desktop/nadp-desktop-file.h        |    4 +
 nautilus-actions/io-provider-desktop/nadp-read.c   |   13 +++-
 nautilus-actions/io-provider-desktop/nadp-write.c  |    9 ++
 5 files changed, 132 insertions(+), 2 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 35df335..c2b2400 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,17 @@
 2009-12-07 Pierre Wieser <pwieser trychlos org>
 
+	* nautilus-actions/io-provider-desktop/nadp-desktop-file.c:
+	* nautilus-actions/io-provider-desktop/nadp-desktop-file.h
+	(nadp_desktop_file_get_icon, nadp_desktop_file_get_enabled,
+	nadp_desktop_file_set_icon, nadp_desktop_file_set_enabled):
+	New functions.
+
+	* nautilus-actions/io-provider-desktop/nadp-read.c
+	(read_item_properties): Read icon and enabled status.
+
+	* nautilus-actions/io-provider-desktop/nadp-write.c (write_item):
+	Write icon name or path and enabled status.
+
 	* nautilus-actions/plugin/nautilus-actions.c (build_nautilus_menus):
 	Emits a warning when finding a disabled or invalid item.
 
diff --git a/nautilus-actions/io-provider-desktop/nadp-desktop-file.c b/nautilus-actions/io-provider-desktop/nadp-desktop-file.c
index 49b3f90..ff86bee 100644
--- a/nautilus-actions/io-provider-desktop/nadp-desktop-file.c
+++ b/nautilus-actions/io-provider-desktop/nadp-desktop-file.c
@@ -395,6 +395,58 @@ nadp_desktop_file_get_tooltip( const NadpDesktopFile *ndf )
 }
 
 /**
+ * nadp_desktop_file_get_icon:
+ * @ndf: the #NadpDesktopFile instance.
+ *
+ * Returns: the icon of the action, as a newly allocated string which
+ * should be g_free() by the caller.
+ */
+gchar *
+nadp_desktop_file_get_icon( const NadpDesktopFile *ndf )
+{
+	gchar *icon;
+
+	icon = NULL;
+	g_return_val_if_fail( NADP_IS_DESKTOP_FILE( ndf ), icon );
+
+	if( !ndf->private->dispose_has_run ){
+		icon = g_key_file_get_locale_string(
+				ndf->private->key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, NULL, NULL );
+	}
+
+	return( icon );
+}
+
+/**
+ * nadp_desktop_file_get_enabled:
+ * @ndf: the #NadpDesktopFile instance.
+ *
+ * Returns: %TRUE if the action is enabled, %FALSE else.
+ *
+ * Defaults to TRUE if the key is not specified.
+ */
+gboolean
+nadp_desktop_file_get_enabled( const NadpDesktopFile *ndf )
+{
+	gboolean enabled;
+
+	enabled = TRUE;
+	g_return_val_if_fail( NADP_IS_DESKTOP_FILE( ndf ), enabled );
+
+	if( !ndf->private->dispose_has_run ){
+
+		if( g_key_file_has_key(
+				ndf->private->key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, NULL )){
+
+			enabled = !g_key_file_get_boolean(
+				ndf->private->key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, NULL );
+		}
+	}
+
+	return( enabled );
+}
+
+/**
  * nadp_desktop_file_set_label:
  * @ndf: the #NadpDesktopFile instance.
  * @label: the label to be set.
@@ -439,6 +491,50 @@ nadp_desktop_file_set_tooltip( NadpDesktopFile *ndf, const gchar *tooltip )
 }
 
 /**
+ * nadp_desktop_file_set_icon:
+ * @ndf: the #NadpDesktopFile instance.
+ * @icon: the icon name or path to be set.
+ *
+ * Sets the icon.
+ */
+void
+nadp_desktop_file_set_icon( NadpDesktopFile *ndf, const gchar *icon )
+{
+	char **locales;
+
+	g_return_if_fail( NADP_IS_DESKTOP_FILE( ndf ));
+
+	if( !ndf->private->dispose_has_run ){
+
+		locales = ( char ** ) g_get_language_names();
+		g_key_file_set_locale_string(
+				ndf->private->key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, locales[0], icon );
+	}
+}
+
+/**
+ * nadp_desktop_file_set_enabled:
+ * @ndf: the #NadpDesktopFile instance.
+ * @enabled: whether the action is enabled.
+ *
+ * Sets the enabled status of the item.
+ *
+ * Note that the NoDisplay key has an inversed logic regards to enabled
+ * status.
+ */
+void
+nadp_desktop_file_set_enabled( NadpDesktopFile *ndf, gboolean enabled )
+{
+	g_return_if_fail( NADP_IS_DESKTOP_FILE( ndf ));
+
+	if( !ndf->private->dispose_has_run ){
+
+		g_key_file_set_boolean(
+				ndf->private->key_file, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, !enabled );
+	}
+}
+
+/**
  * nadp_desktop_file_write:
  * @ndf: the #NadpDesktopFile instance.
  *
diff --git a/nautilus-actions/io-provider-desktop/nadp-desktop-file.h b/nautilus-actions/io-provider-desktop/nadp-desktop-file.h
index ecaab64..98cbbdf 100644
--- a/nautilus-actions/io-provider-desktop/nadp-desktop-file.h
+++ b/nautilus-actions/io-provider-desktop/nadp-desktop-file.h
@@ -79,9 +79,13 @@ gchar           *nadp_desktop_file_get_key_file_path( const NadpDesktopFile *ndf
 gchar           *nadp_desktop_file_get_id( const NadpDesktopFile *ndf );
 gchar           *nadp_desktop_file_get_label( const NadpDesktopFile *ndf );
 gchar           *nadp_desktop_file_get_tooltip( const NadpDesktopFile *ndf );
+gchar           *nadp_desktop_file_get_icon( const NadpDesktopFile *ndf );
+gboolean         nadp_desktop_file_get_enabled( const NadpDesktopFile *ndf );
 
 void             nadp_desktop_file_set_label( NadpDesktopFile *ndf, const gchar *label );
 void             nadp_desktop_file_set_tooltip( NadpDesktopFile *ndf, const gchar *tooltip );
+void             nadp_desktop_file_set_icon( NadpDesktopFile *ndf, const gchar *icon );
+void             nadp_desktop_file_set_enabled( NadpDesktopFile *ndf, gboolean enabled );
 
 gboolean         nadp_desktop_file_write( NadpDesktopFile *ndf );
 
diff --git a/nautilus-actions/io-provider-desktop/nadp-read.c b/nautilus-actions/io-provider-desktop/nadp-read.c
index 244a61c..c7871e9 100644
--- a/nautilus-actions/io-provider-desktop/nadp-read.c
+++ b/nautilus-actions/io-provider-desktop/nadp-read.c
@@ -245,13 +245,15 @@ read_item_properties( const NadpDesktopProvider *provider, NAObjectItem *item, N
 	gchar *id;
 	gchar *label;
 	gchar *tooltip;
+	gchar *icon;
+	gboolean enabled;
 	gchar *path;
 	gboolean writable;
 
 	id = nadp_desktop_file_get_id( ndf );
 	na_object_set_id( item, id );
 
-	label = ( gchar * ) nadp_desktop_file_get_label( ndf );
+	label = nadp_desktop_file_get_label( ndf );
 	if( !label || !g_utf8_strlen( label, -1 )){
 		g_warning( "%s: id=%s, label not found or empty", thisfn, id );
 		g_free( label );
@@ -260,10 +262,17 @@ read_item_properties( const NadpDesktopProvider *provider, NAObjectItem *item, N
 	na_object_set_label( item, label );
 	g_free( label );
 
-	tooltip = ( gchar * ) nadp_desktop_file_get_tooltip( ndf );
+	tooltip = nadp_desktop_file_get_tooltip( ndf );
 	na_object_set_tooltip( item, tooltip );
 	g_free( tooltip );
 
+	icon = nadp_desktop_file_get_icon( ndf );
+	na_object_set_icon( item, icon );
+	g_free( icon );
+
+	enabled = nadp_desktop_file_get_enabled( ndf );
+	na_object_set_enabled( item, enabled );
+
 	path = nadp_desktop_file_get_key_file_path( ndf );
 	writable = nadp_utils_is_writable_file( path );
 	g_free( path );
diff --git a/nautilus-actions/io-provider-desktop/nadp-write.c b/nautilus-actions/io-provider-desktop/nadp-write.c
index dcec005..80ed0d4 100644
--- a/nautilus-actions/io-provider-desktop/nadp-write.c
+++ b/nautilus-actions/io-provider-desktop/nadp-write.c
@@ -191,6 +191,8 @@ write_item( const NAIIOProvider *provider, const NAObjectItem *item, NadpDesktop
 	guint ret;
 	gchar *label;
 	gchar *tooltip;
+	gchar *icon;
+	gboolean enabled;
 
 	ret = NA_IIO_PROVIDER_WRITE_OK;
 
@@ -202,6 +204,13 @@ write_item( const NAIIOProvider *provider, const NAObjectItem *item, NadpDesktop
 	nadp_desktop_file_set_tooltip( ndf, tooltip );
 	g_free( tooltip );
 
+	icon = na_object_get_icon( item );
+	nadp_desktop_file_set_icon( ndf, icon );
+	g_free( icon );
+
+	enabled = na_object_is_enabled( item );
+	nadp_desktop_file_set_enabled( ndf, enabled );
+
 	if( !nadp_desktop_file_write( ndf )){
 		ret = NA_IIO_PROVIDER_WRITE_ERROR;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]