[Xfce4-commits] [apps/xfdashboard] 01/01: Only load actions and keywords on first access

noreply at xfce.org noreply at xfce.org
Thu Nov 2 08:41:46 CET 2017


This is an automated email from the git hooks/post-receive script.

n   o   m   a   d       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfdashboard.

commit c687cfc42fc59a2e46cad9658a9f7e289655f3e5
Author: Stephan Haller <nomad at froevel.de>
Date:   Thu Nov 2 08:40:40 2017 +0100

    Only load actions and keywords on first access
    
    To reduce I/O when secondary source is used only load actions and keywords on first access and not at start-up or each reload of menu item
---
 libxfdashboard/desktop-app-info.c | 52 ++++++++++++++++++++++++++++++---------
 1 file changed, 40 insertions(+), 12 deletions(-)

diff --git a/libxfdashboard/desktop-app-info.c b/libxfdashboard/desktop-app-info.c
index 53a21aa..69c9ed2 100644
--- a/libxfdashboard/desktop-app-info.c
+++ b/libxfdashboard/desktop-app-info.c
@@ -63,7 +63,10 @@ struct _XfdashboardDesktopAppInfoPrivate
 
 	gchar				*binaryExecutable;
 
+	gboolean			needActions;
 	GList				*actions;
+
+	gboolean			needKeywords;
 	GList				*keywords;
 };
 
@@ -212,13 +215,17 @@ static void _xfdashboard_desktop_app_info_update_actions(XfdashboardDesktopAppIn
 
 	priv=self->priv;
 
-	/* Get application actions for menu item (desktop entry) */
+	/* Reload only if needed */
+	if(!priv->needActions) return;
+
+	/* Remove old actions loaded */
 	if(priv->actions)
 	{
 		g_list_free_full(priv->actions, g_object_unref);
 		priv->actions=NULL;
 	}
 
+	/* Get application actions for menu item (desktop entry) */
 #if 0 /*GARCON_CHECK_VERSION(0, 6, 3)*/
 	if(priv->item)
 	{
@@ -390,6 +397,9 @@ static void _xfdashboard_desktop_app_info_update_actions(XfdashboardDesktopAppIn
 		if(itemActions) g_strfreev(itemActions);
 	}
 #endif
+
+	/* Set flag that application actions are loaded and do not need futher updates */
+	priv->needActions=FALSE;
 }
 
 /* (Re-)Load keywords */
@@ -401,13 +411,17 @@ static void _xfdashboard_desktop_app_info_update_keywords(XfdashboardDesktopAppI
 
 	priv=self->priv;
 
-	/* Get application actions for menu item (desktop entry) */
+	/* Reload only if needed */
+	if(!priv->needKeywords) return;
+
+	/* Remove old actions loaded */
 	if(priv->keywords)
 	{
 		g_list_free_full(priv->keywords, g_free);
 		priv->keywords=NULL;
 	}
 
+	/* Get application actions for menu item (desktop entry) */
 #if 0 /*GARCON_CHECK_VERSION(0, 6, 3)*/
 	if(priv->item)
 	{
@@ -477,6 +491,9 @@ static void _xfdashboard_desktop_app_info_update_keywords(XfdashboardDesktopAppI
 		if(keywords) g_strfreev(keywords);
 	}
 #endif
+
+	/* Set flag that keywords are loaded and do not need futher updates */
+	priv->needKeywords=FALSE;
 }
 
 /* Menu item has changed */
@@ -580,11 +597,11 @@ static void _xfdashboard_desktop_app_info_set_file(XfdashboardDesktopAppInfo *se
 		/* Get path to executable file for this application */
 		__xfdashboard_desktop_app_info_update_binary_executable(self);
 
-		/* Get application actions */
-		_xfdashboard_desktop_app_info_update_actions(self);
-
-		/* Get keywords of application */
-		_xfdashboard_desktop_app_info_update_keywords(self);
+		/* Set flag to reload application actions and keywords. They will be
+		 * cleared and (re-)loaded on-demand.
+		 */
+		priv->needActions=TRUE;
+		priv->needKeywords=TRUE;
 
 		/* Notify about property change */
 		g_object_notify_by_pspec(G_OBJECT(self), XfdashboardDesktopAppInfoProperties[PROP_FILE]);
@@ -1483,12 +1500,14 @@ static void _xfdashboard_desktop_app_info_dispose(GObject *inObject)
 		g_list_free_full(priv->keywords, g_free);
 		priv->keywords=NULL;
 	}
+	priv->needKeywords=TRUE;
 
 	if(priv->actions)
 	{
 		g_list_free_full(priv->actions, g_object_unref);
 		priv->actions=NULL;
 	}
+	priv->needActions=TRUE;
 
 	if(priv->binaryExecutable)
 	{
@@ -1653,6 +1672,9 @@ static void xfdashboard_desktop_app_info_init(XfdashboardDesktopAppInfo *self)
 	priv->itemChangedID=0;
 	priv->binaryExecutable=NULL;
 	priv->actions=NULL;
+	priv->needActions=TRUE;
+	priv->keywords=NULL;
+	priv->needKeywords=TRUE;
 }
 
 /* IMPLEMENTATION: Public API */
@@ -1812,11 +1834,11 @@ gboolean xfdashboard_desktop_app_info_reload(XfdashboardDesktopAppInfo *self)
 		/* Update path to executable file for this application */
 		__xfdashboard_desktop_app_info_update_binary_executable(self);
 
-		/* Reload application actions */
-		_xfdashboard_desktop_app_info_update_actions(self);
-
-		/* Reload keywords of application */
-		_xfdashboard_desktop_app_info_update_keywords(self);
+		/* Set flag to reload application actions and keywords. They will be
+		 * cleared and (re-)loaded on-demand.
+		 */
+		priv->needActions=TRUE;
+		priv->needKeywords=TRUE;
 	}
 
 	/* If reload was successful emit changed signal */
@@ -1844,6 +1866,9 @@ GList* xfdashboard_desktop_app_info_get_actions(XfdashboardDesktopAppInfo *self)
 {
 	g_return_val_if_fail(XFDASHBOARD_IS_DESKTOP_APP_INFO(self), FALSE);
 
+	/* Update list of application actions */
+	_xfdashboard_desktop_app_info_update_actions(self);
+
 	/* Return the list of application actions */
 	return(self->priv->actions);
 }
@@ -1944,6 +1969,9 @@ GList* xfdashboard_desktop_app_info_get_keywords(XfdashboardDesktopAppInfo *self
 {
 	g_return_val_if_fail(XFDASHBOARD_IS_DESKTOP_APP_INFO(self), FALSE);
 
+	/* Update list of keywords */
+	_xfdashboard_desktop_app_info_update_keywords(self);
+
 	/* Return the list of keywords */
 	return(self->priv->keywords);
 }

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list