[anjuta] symbol-db: bgo#610404 added cancel logic to search command.



commit 4a68f94cdd53b48a00cffb8e3b694baf4bac2b47
Author: Massimo Corà <mcora src gnome org>
Date:   Fri Feb 19 17:23:05 2010 +0100

    symbol-db: bgo#610404 added cancel logic to search command.

 plugins/symbol-db/symbol-db-search-command.c |   36 ++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 5 deletions(-)
---
diff --git a/plugins/symbol-db/symbol-db-search-command.c b/plugins/symbol-db/symbol-db-search-command.c
index 3758136..60ebc85 100644
--- a/plugins/symbol-db/symbol-db-search-command.c
+++ b/plugins/symbol-db/symbol-db-search-command.c
@@ -37,6 +37,7 @@ struct _SymbolDBSearchCommandPriv {
 	IAnjutaSymbolManagerSearchFileScope filescope_search;
 	gint results_limit;
 	gint results_offset;
+	gboolean is_cancelled;
 	
 
 	/* store the pointer to an iterator. The object does not have to be
@@ -55,7 +56,8 @@ sdb_search_command_init (SymbolDBSearchCommand *object)
 
 	object->priv->gfile = NULL;
 	object->priv->session_packages = NULL;
-	object->priv->pattern = NULL;	
+	object->priv->pattern = NULL;
+	object->priv->is_cancelled = FALSE;
 }
 
 static void
@@ -81,7 +83,8 @@ sdb_search_command_finalize (GObject *object)
 		g_list_free (priv->session_packages);		
 	}
 	priv->session_packages = NULL;
-	
+
+	priv->is_cancelled = FALSE;
 	
 	g_free (sdbsc->priv);
 	
@@ -184,9 +187,23 @@ sdb_search_command_run (AnjutaCommand *command)
 		return 1;
 	}
 
-	DEBUG_PRINT ("Notify!");
-	anjuta_command_notify_data_arrived (command);
-	
+	if (priv->is_cancelled == FALSE)
+	{
+		DEBUG_PRINT ("Notify!");
+		/* let the notifier calling the callback */
+		anjuta_command_notify_data_arrived (command);
+	}
+	else {
+		/* we received a cancel event. */
+		DEBUG_PRINT ("Do *NOT* notify the callback. Search was cancelled.");
+
+		if (priv->iterator_result != NULL)
+		{
+			g_object_unref (priv->iterator_result);
+			priv->iterator_result = NULL;
+		}
+	}
+		
 	/* 0 should be for no error */
 	return 0;
 }
@@ -194,7 +211,16 @@ sdb_search_command_run (AnjutaCommand *command)
 static void
 sdb_search_command_cancel(AnjutaCommand* command)
 {
+	SymbolDBSearchCommand *sdbsc;
+	SymbolDBSearchCommandPriv *priv;
+
+	sdbsc = SYMBOL_DB_SEARCH_COMMAND (command);
+
+	priv = sdbsc->priv;
 
+	DEBUG_PRINT ("Search command cancelled");
+	/* set the cancelled status tu TRUE */
+	priv->is_cancelled = TRUE;
 }
 
 static void



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