[gnome-launch-box] turn tracker results to be launchable
- From: Sven Herzberg <herzi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-launch-box] turn tracker results to be launchable
- Date: Thu, 11 Feb 2010 13:35:16 +0000 (UTC)
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]