[gnome-launch-box] turn tracker results to be launchable



commit 58ef71657556b641cc7ad0c598305030a041529b
Author: Sven Herzberg <herzi gnome-de org>
Date:   Tue Feb 9 00:03:10 2010 +0100

    turn tracker results to be launchable
    
    * src/lb-item-application.c,
    * src/lb-item-application.h,
    * src/lb-module-applications.c: refactored the launch logic into the
      item
    * src/lb-module-tracker.c: add the launch action to the results

 src/lb-item-application.c    |   59 ++++++++++++++++++++++++++++++++++++++++++
 src/lb-item-application.h    |    2 +
 src/lb-module-applications.c |   53 +-------------------------------------
 src/lb-module-tracker.c      |    8 +++++
 4 files changed, 70 insertions(+), 52 deletions(-)
---
diff --git a/src/lb-item-application.c b/src/lb-item-application.c
index fe9885d..2d4aa0a 100644
--- a/src/lb-item-application.c
+++ b/src/lb-item-application.c
@@ -26,6 +26,8 @@
 
 #include "lb-item-application.h"
 
+#include <libgnome/gnome-desktop-item.h>
+
 #define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), LB_TYPE_ITEM_APPLICATION, LbItemApplicationPriv))
 
 typedef struct _LbItemApplicationPriv LbItemApplicationPriv;
@@ -48,6 +50,7 @@ static void   item_application_get_property (GObject            *object,
 					     guint               property_id,
 					     GValue             *value,
 					     GParamSpec         *pspec);
+static void    module_applications_activate_action (LbAction  *action);
 
 G_DEFINE_TYPE (LbItemApplication, lb_item_application, LB_TYPE_ITEM);
 static LbItemClass *parent_class = NULL;
@@ -147,6 +150,62 @@ item_application_get_property (GObject    *object,
 	}
 }
 
+static void
+module_applications_activate_action (LbAction *action)
+{
+	GError           *error = NULL;
+	GnomeDesktopItem *item;
+	const gchar      *item_path;
+
+	item_path = lb_action_get_data (action);
+
+	item = gnome_desktop_item_new_from_file (
+		item_path, 
+		GNOME_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS |
+		GNOME_DESKTOP_ITEM_LOAD_NO_TRANSLATIONS,
+		&error);
+	
+	if (!item) {
+		g_printerr ("Unable to open desktop file %s for launcher: %s\n",
+			    item_path, 
+			    error->message);
+		g_error_free (error);
+
+		return;
+	}
+
+	if (gnome_desktop_item_launch (item, NULL, 0, &error) < 0) {
+		g_printerr ("Unable to launch: '%s'\n", error->message);
+		g_error_free (error);
+	}
+}
+
+void
+lb_item_application_add_actions (LbItemApplication* item)
+{
+	const gchar *desktop_file;
+	LbAction *action;
+
+	g_return_if_fail (LB_IS_ITEM_APPLICATION (item));
+
+	if (!lb_item_application_get_desktop_file (LB_ITEM_APPLICATION (item))) {
+		return;
+	}
+
+	desktop_file = lb_item_application_get_desktop_file (LB_ITEM_APPLICATION (item));
+	action = lb_action_new (LB_ACTION_LAUNCH);
+
+	lb_action_set_data (action, g_strdup (desktop_file), g_free);
+
+	g_signal_connect (action, "activate",
+			  G_CALLBACK (module_applications_activate_action),
+			  NULL);
+
+	lb_item_add_action (LB_ITEM (item), action);
+
+	g_object_unref (action);
+}
+
 const gchar *
 lb_item_application_get_desktop_file (LbItemApplication *item)
 {
diff --git a/src/lb-item-application.h b/src/lb-item-application.h
index 831ad27..d4039f4 100644
--- a/src/lb-item-application.h
+++ b/src/lb-item-application.h
@@ -52,6 +52,8 @@ struct _LbItemApplicationClass {
 GType         lb_item_application_get_type (void) G_GNUC_CONST;
 LbItem*       lb_item_application_new      (gchar const* desktop_file);
 
+void          lb_item_application_add_actions      (LbItemApplication* item);
+
 const gchar * lb_item_application_get_desktop_file (LbItemApplication *item);
 void          lb_item_application_set_desktop_file (LbItemApplication *item,
 						    const gchar       *path);
diff --git a/src/lb-module-applications.c b/src/lb-module-applications.c
index aa7c639..28b0ffb 100644
--- a/src/lb-module-applications.c
+++ b/src/lb-module-applications.c
@@ -68,8 +68,6 @@ static gboolean module_applications_ensure_app_list (LbModuleApplications *modul
 static void    module_applications_tree_changed    (GMenuTree          *tree,
 						    LbModuleApplications *module);
 static void    module_applications_free_app_list   (LbModuleApplications *module);
-static void    module_applications_activate_action (LbAction             *action,
-						    LbModuleApplications *module);
 gchar *        module_applications_strip_arguments (const gchar       *exec_name);
 
 
@@ -204,29 +202,11 @@ module_applications_query (LbModule    *module,
 static void
 module_applications_add_actions (LbModule *module, LbItem *item)
 {
-	LbAction *action;
-	const gchar *desktop_file;
-
 	if (!LB_IS_ITEM_APPLICATION (item)) {
 		return;
 	}
 
-	if (!lb_item_application_get_desktop_file (LB_ITEM_APPLICATION (item))) {
-		return;
-	}
-
-	desktop_file = lb_item_application_get_desktop_file (LB_ITEM_APPLICATION (item));
-	action = lb_action_new (LB_ACTION_LAUNCH);
-
-	lb_action_set_data (action, g_strdup (desktop_file), g_free);
-
-	g_signal_connect (action, "activate",
-			  G_CALLBACK (module_applications_activate_action),
-			  module);
-
-	lb_item_add_action (item, action);
-
-	g_object_unref (action);
+	lb_item_application_add_actions (LB_ITEM_APPLICATION (item));
 }
 
 static void
@@ -320,37 +300,6 @@ module_applications_free_app_list (LbModuleApplications *module)
 	priv->applications = NULL;
 }
 
-static void
-module_applications_activate_action (LbAction             *action,
-				     LbModuleApplications *module)
-{
-	GError           *error = NULL;
-	GnomeDesktopItem *item;
-	const gchar      *item_path;
-
-	item_path = lb_action_get_data (action);
-
-	item = gnome_desktop_item_new_from_file (
-		item_path, 
-		GNOME_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS |
-		GNOME_DESKTOP_ITEM_LOAD_NO_TRANSLATIONS,
-		&error);
-	
-	if (!item) {
-		g_printerr ("Unable to open desktop file %s for launcher: %s\n",
-			    item_path, 
-			    error->message);
-		g_error_free (error);
-
-		return;
-	}
-
-	if (gnome_desktop_item_launch (item, NULL, 0, &error) < 0) {
-		g_printerr ("Unable to launch: '%s'\n", error->message);
-		g_error_free (error);
-	}
-}
-
 gchar *
 module_applications_strip_arguments (const gchar *exec_name)
 {
diff --git a/src/lb-module-tracker.c b/src/lb-module-tracker.c
index bd5c21a..7349bf5 100644
--- a/src/lb-module-tracker.c
+++ b/src/lb-module-tracker.c
@@ -69,6 +69,13 @@ G_DEFINE_TYPE (LbModuleTracker, lb_module_tracker, LB_TYPE_MODULE);
 static LbModuleClass *parent_class = NULL;
 
 static void
+lb_module_tracker_add_actions (LbModule* module,
+                               LbItem  * item)
+{
+  lb_item_application_add_actions (LB_ITEM_APPLICATION (item));
+}
+
+static void
 lb_module_tracker_class_init (LbModuleTrackerClass *klass)
 {
 	GObjectClass  *object_class = G_OBJECT_CLASS (klass);
@@ -81,6 +88,7 @@ lb_module_tracker_class_init (LbModuleTrackerClass *klass)
 	object_class->get_property = lb_module_tracker_get_property;
 
 	module_class->query        = lb_module_tracker_query;
+        module_class->add_actions  = lb_module_tracker_add_actions;
 
 #if 0
 	g_object_class_install_property (object_class, PROP_NAME,



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