gnome-session r4762 - in branches/dbus_based: . gnome-session
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-session r4762 - in branches/dbus_based: . gnome-session
- Date: Thu, 19 Jun 2008 00:39:22 +0000 (UTC)
Author: mccann
Date: Thu Jun 19 00:39:22 2008
New Revision: 4762
URL: http://svn.gnome.org/viewvc/gnome-session?rev=4762&view=rev
Log:
2008-06-18 William Jon McCann <jmccann redhat com>
* gnome-session/gsm-app.c (gsm_app_error_quark), (gsm_app_set_id),
(gsm_app_set_client_id), (gsm_app_set_property),
(gsm_app_get_property), (gsm_app_dispose), (gsm_app_class_init):
* gnome-session/gsm-app.h:
* gnome-session/gsm-autostart-app.c (load_desktop_file),
(gsm_autostart_app_set_desktop_filename),
(gsm_autostart_app_set_property), (gsm_autostart_app_get_property),
(gsm_autostart_app_dispose), (is_disabled),
(autostart_app_stop_spawn), (autostart_app_stop_activate),
(gsm_autostart_app_stop), (autostart_app_start_spawn),
(start_notify), (autostart_app_start_activate),
(gsm_autostart_app_start), (gsm_autostart_app_constructor),
(gsm_autostart_app_class_init), (gsm_autostart_app_new):
* gnome-session/gsm-autostart-app.h:
* gnome-session/gsm-manager.c (_app_has_client_id),
(find_app_for_client_id), (register_client_for_name),
(bus_name_owner_changed), (register_manager),
(append_default_apps), (append_autostart_apps),
(append_required_apps):
Add preliminary support for service clients.
Modified:
branches/dbus_based/ChangeLog
branches/dbus_based/gnome-session/gsm-app.c
branches/dbus_based/gnome-session/gsm-app.h
branches/dbus_based/gnome-session/gsm-autostart-app.c
branches/dbus_based/gnome-session/gsm-autostart-app.h
branches/dbus_based/gnome-session/gsm-manager.c
Modified: branches/dbus_based/gnome-session/gsm-app.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-app.c (original)
+++ branches/dbus_based/gnome-session/gsm-app.c Thu Jun 19 00:39:22 2008
@@ -57,6 +57,17 @@
G_DEFINE_TYPE (GsmApp, gsm_app, G_TYPE_OBJECT)
+GQuark
+gsm_app_error_quark (void)
+{
+ static GQuark ret = 0;
+ if (ret == 0) {
+ ret = g_quark_from_static_string ("gsm_app_error");
+ }
+
+ return ret;
+}
+
static void
gsm_app_init (GsmApp *app)
{
@@ -73,21 +84,44 @@
}
static void
-set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+gsm_app_set_id (GsmApp *app,
+ const char *id)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_free (app->priv->id);
+
+ app->priv->id = g_strdup (id);
+ g_object_notify (G_OBJECT (app), "id");
+
+}
+static void
+gsm_app_set_client_id (GsmApp *app,
+ const char *client_id)
+{
+ g_return_if_fail (GSM_IS_APP (app));
+
+ g_free (app->priv->client_id);
+
+ app->priv->client_id = g_strdup (client_id);
+ g_object_notify (G_OBJECT (app), "client-id");
+
+}
+
+static void
+gsm_app_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
GsmApp *app = GSM_APP (object);
switch (prop_id) {
case PROP_CLIENT_ID:
- g_free (app->priv->client_id);
- app->priv->client_id = g_value_dup_string (value);
+ gsm_app_set_client_id (app, g_value_get_string (value));
break;
case PROP_ID:
- g_free (app->priv->id);
- app->priv->id = g_value_dup_string (value);
+ gsm_app_set_id (app, g_value_get_string (value));
break;
case PROP_PHASE:
gsm_app_set_phase (app, g_value_get_int (value));
@@ -98,10 +132,10 @@
}
static void
-get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+gsm_app_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
GsmApp *app = GSM_APP (object);
@@ -121,7 +155,7 @@
}
static void
-dispose (GObject *object)
+gsm_app_dispose (GObject *object)
{
GsmApp *app = GSM_APP (object);
@@ -136,9 +170,9 @@
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
- object_class->set_property = set_property;
- object_class->get_property = get_property;
- object_class->dispose = dispose;
+ object_class->set_property = gsm_app_set_property;
+ object_class->get_property = gsm_app_get_property;
+ object_class->dispose = gsm_app_dispose;
klass->get_id = NULL;
klass->start = NULL;
Modified: branches/dbus_based/gnome-session/gsm-app.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-app.h (original)
+++ branches/dbus_based/gnome-session/gsm-app.h Thu Jun 19 00:39:22 2008
@@ -76,6 +76,16 @@
GsmClient *client);
};
+typedef enum
+{
+ GSM_APP_ERROR_GENERAL = 0,
+ GSM_APP_ERROR_START,
+ GSM_APP_NUM_ERRORS
+} GsmAppError;
+
+#define GSM_APP_ERROR gsm_app_error_quark ()
+
+GQuark gsm_app_error_quark (void);
GType gsm_app_get_type (void) G_GNUC_CONST;
gboolean gsm_app_start (GsmApp *app,
@@ -97,9 +107,6 @@
gboolean gsm_app_provides (GsmApp *app,
const char *service);
gboolean gsm_app_is_disabled (GsmApp *app);
-void gsm_app_set_client (GsmApp *app,
- GsmClient *client);
-
void gsm_app_registered (GsmApp *app);
G_END_DECLS
Modified: branches/dbus_based/gnome-session/gsm-autostart-app.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-autostart-app.c (original)
+++ branches/dbus_based/gnome-session/gsm-autostart-app.c Thu Jun 19 00:39:22 2008
@@ -29,17 +29,32 @@
#include <glib.h>
#include <gio/gio.h>
+#include <gconf/gconf-client.h>
+
#include "gsm-autostart-app.h"
-#include "gconf.h"
+#include "util.h"
+
+enum {
+ AUTOSTART_LAUNCH_SPAWN = 0,
+ AUTOSTART_LAUNCH_ACTIVATE,
+};
+
+#define GSM_SESSION_CLIENT_DBUS_INTERFACE "org.gnome.SessionClient"
struct _GsmAutostartAppPrivate {
+ char *desktop_filename;
char *desktop_id;
char *startup_id;
+
GFileMonitor *monitor;
gboolean condition;
EggDesktopFile *desktop_file;
+
+ int launch_type;
GPid pid;
guint child_watch_id;
+ DBusGProxy *proxy;
+ DBusGProxyCall *proxy_call;
};
enum {
@@ -49,7 +64,7 @@
enum {
PROP_0,
- PROP_DESKTOP_FILE,
+ PROP_DESKTOP_FILENAME,
};
static guint signals[LAST_SIGNAL] = { 0 };
@@ -68,33 +83,16 @@
app->priv->condition = FALSE;
}
-static void
-gsm_autostart_app_set_desktop_file (GsmAutostartApp *app,
- const char *desktop_filename)
+static gboolean
+load_desktop_file (GsmAutostartApp *app)
{
- GError *error;
+ char *dbus_name;
+ char *client_id;
char *phase_str;
int phase;
- if (app->priv->desktop_file != NULL) {
- egg_desktop_file_free (app->priv->desktop_file);
- app->priv->desktop_file = NULL;
- g_free (app->priv->desktop_id);
- }
-
- if (desktop_filename == NULL) {
- return;
- }
-
- app->priv->desktop_id = g_path_get_basename (desktop_filename);
-
- app->priv->desktop_file = egg_desktop_file_new (desktop_filename, &error);
if (app->priv->desktop_file == NULL) {
- g_warning ("Could not parse desktop file %s: %s",
- desktop_filename,
- error->message);
- g_error_free (error);
- return;
+ return FALSE;
}
phase_str = egg_desktop_file_get_string (app->priv->desktop_file,
@@ -118,7 +116,66 @@
phase = GSM_MANAGER_PHASE_APPLICATION;
}
- g_object_set (app, "phase", phase, NULL);
+ dbus_name = egg_desktop_file_get_string (app->priv->desktop_file,
+ "X-GNOME-DBus-Name",
+ NULL);
+ if (dbus_name != NULL) {
+ app->priv->launch_type = AUTOSTART_LAUNCH_ACTIVATE;
+ } else {
+ app->priv->launch_type = AUTOSTART_LAUNCH_SPAWN;
+ }
+
+ /* this must only be done on first load */
+ switch (app->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ client_id = gsm_util_generate_client_id ();
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ client_id = g_strdup (dbus_name);
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ g_object_set (app,
+ "phase", phase,
+ "client-id", client_id,
+ NULL);
+
+ g_free (client_id);
+ g_free (dbus_name);
+
+ return TRUE;
+}
+
+static void
+gsm_autostart_app_set_desktop_filename (GsmAutostartApp *app,
+ const char *desktop_filename)
+{
+ GError *error;
+
+ g_debug ("GsmAutostartApp: setting desktop filename to %s", desktop_filename);
+
+ if (app->priv->desktop_file != NULL) {
+ egg_desktop_file_free (app->priv->desktop_file);
+ app->priv->desktop_file = NULL;
+ g_free (app->priv->desktop_id);
+ }
+
+ if (desktop_filename == NULL) {
+ return;
+ }
+
+ app->priv->desktop_id = g_path_get_basename (desktop_filename);
+
+ app->priv->desktop_file = egg_desktop_file_new (desktop_filename, &error);
+ if (app->priv->desktop_file == NULL) {
+ g_warning ("Could not parse desktop file %s: %s",
+ desktop_filename,
+ error->message);
+ g_error_free (error);
+ return;
+ }
}
static void
@@ -132,8 +189,8 @@
self = GSM_AUTOSTART_APP (object);
switch (prop_id) {
- case PROP_DESKTOP_FILE:
- gsm_autostart_app_set_desktop_file (self, g_value_get_string (value));
+ case PROP_DESKTOP_FILENAME:
+ gsm_autostart_app_set_desktop_filename (self, g_value_get_string (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@@ -152,7 +209,7 @@
self = GSM_AUTOSTART_APP (object);
switch (prop_id) {
- case PROP_DESKTOP_FILE:
+ case PROP_DESKTOP_FILENAME:
if (self->priv->desktop_file != NULL) {
g_value_set_string (value, egg_desktop_file_get_source (self->priv->desktop_file));
} else {
@@ -192,6 +249,16 @@
priv->child_watch_id = 0;
}
+ if (priv->proxy_call != NULL) {
+ dbus_g_proxy_cancel_call (priv->proxy, priv->proxy_call);
+ priv->proxy_call = NULL;
+ }
+
+ if (priv->proxy != NULL) {
+ g_object_unref (priv->proxy);
+ priv->proxy = NULL;
+ }
+
if (priv->monitor) {
g_file_monitor_cancel (priv->monitor);
}
@@ -398,7 +465,7 @@
if (key) {
GConfClient *client;
- client = gsm_gconf_get_client ();
+ client = gconf_client_get_default ();
g_assert (GCONF_IS_CLIENT (client));
@@ -471,57 +538,200 @@
}
static gboolean
-gsm_autostart_app_stop (GsmApp *app,
- GError **error)
+autostart_app_stop_spawn (GsmAutostartApp *app,
+ GError **error)
{
- /* FIXME: */
- /* first try to stop client */
+ return TRUE;
+}
- /* then try to stop pid */
+static gboolean
+autostart_app_stop_activate (GsmAutostartApp *app,
+ GError **error)
+{
return TRUE;
}
static gboolean
-gsm_autostart_app_start (GsmApp *app,
- GError **error)
+gsm_autostart_app_stop (GsmApp *app,
+ GError **error)
{
- char *env[2] = { NULL, NULL };
- gboolean success;
GsmAutostartApp *aapp;
+ gboolean ret;
aapp = GSM_AUTOSTART_APP (app);
g_return_val_if_fail (aapp->priv->desktop_file != NULL, FALSE);
- if (egg_desktop_file_get_boolean (aapp->priv->desktop_file,
- "X-GNOME-Autostart-Notify", NULL) ||
- egg_desktop_file_get_boolean (aapp->priv->desktop_file,
- "AutostartNotify", NULL)) {
- env[0] = g_strdup_printf ("DESKTOP_AUTOSTART_ID=%s",
- gsm_app_get_client_id (app));
+ switch (aapp->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ ret = autostart_app_stop_spawn (aapp, error);
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ ret = autostart_app_stop_activate (aapp, error);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
}
- success = egg_desktop_file_launch (aapp->priv->desktop_file,
+ return ret;
+}
+
+static gboolean
+autostart_app_start_spawn (GsmAutostartApp *app,
+ GError **error)
+{
+ char *env[2] = { NULL, NULL };
+ gboolean success;
+ GError *local_error;
+ const char *client_id;
+
+ client_id = gsm_app_get_client_id (GSM_APP (app));
+ g_assert (client_id != NULL);
+
+ env[0] = g_strdup_printf ("DESKTOP_AUTOSTART_ID=%s", client_id);
+ g_debug ("GsmAutostartApp: starting %s: %s", app->priv->desktop_id, client_id);
+
+ local_error = NULL;
+ success = egg_desktop_file_launch (app->priv->desktop_file,
NULL,
- error,
+ &local_error,
EGG_DESKTOP_FILE_LAUNCH_PUTENV, env,
EGG_DESKTOP_FILE_LAUNCH_FLAGS, G_SPAWN_DO_NOT_REAP_CHILD,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, &aapp->priv->pid,
- EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID, &aapp->priv->startup_id,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_PID, &app->priv->pid,
+ EGG_DESKTOP_FILE_LAUNCH_RETURN_STARTUP_ID, &app->priv->startup_id,
NULL);
-
g_free (env[0]);
if (success) {
- g_debug ("GsmAutostartApp: started pid:%d", aapp->priv->pid);
- aapp->priv->child_watch_id = g_child_watch_add (aapp->priv->pid,
- (GChildWatchFunc)app_exited,
- app);
+ g_debug ("GsmAutostartApp: started pid:%d", app->priv->pid);
+ app->priv->child_watch_id = g_child_watch_add (app->priv->pid,
+ (GChildWatchFunc)app_exited,
+ app);
+ } else {
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_START,
+ "Unable to start application: %s", local_error->message);
+ g_error_free (local_error);
+ }
- return TRUE;
+ return success;
+}
+
+static void
+start_notify (DBusGProxy *proxy,
+ DBusGProxyCall *call,
+ GsmAutostartApp *app)
+{
+ gboolean res;
+ GError *error;
+
+ res = dbus_g_proxy_end_call (proxy,
+ call,
+ &error,
+ G_TYPE_INVALID);
+ app->priv->proxy_call = NULL;
+
+ if (! res) {
+ g_warning ("GsmAutostartApp: Error starting application: %s", error->message);
+ g_error_free (error);
} else {
+ g_debug ("GsmAutostartApp: Started application %s", app->priv->desktop_id);
+ }
+}
+
+static gboolean
+autostart_app_start_activate (GsmAutostartApp *app,
+ GError **error)
+{
+ const char *name;
+ char *path;
+ char *arguments;
+ DBusGConnection *bus;
+ GError *local_error;
+
+ local_error = NULL;
+ bus = dbus_g_bus_get (DBUS_BUS_SESSION, &local_error);
+ if (bus == NULL) {
+ if (local_error != NULL) {
+ g_warning ("error getting session bus: %s", local_error->message);
+ }
+ g_propagate_error (error, local_error);
return FALSE;
}
+
+ name = gsm_app_get_client_id (GSM_APP (app));
+ g_assert (name != NULL);
+
+ path = egg_desktop_file_get_string (app->priv->desktop_file,
+ "X-GNOME-DBus-Path",
+ NULL);
+ if (path == NULL) {
+ /* just pick one? */
+ path = g_strdup ("/");
+ }
+
+ arguments = egg_desktop_file_get_string (app->priv->desktop_file,
+ "X-GNOME-DBus-Start-Arguments",
+ NULL);
+
+ app->priv->proxy = dbus_g_proxy_new_for_name (bus,
+ name,
+ path,
+ GSM_SESSION_CLIENT_DBUS_INTERFACE);
+ if (app->priv->proxy == NULL) {
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_START,
+ "Unable to start application: unable to create proxy for client");
+ return FALSE;
+ }
+
+ app->priv->proxy_call = dbus_g_proxy_begin_call (app->priv->proxy,
+ "Start",
+ (DBusGProxyCallNotify)start_notify,
+ app,
+ NULL,
+ G_TYPE_STRING, arguments,
+ G_TYPE_INVALID);
+ if (app->priv->proxy_call == NULL) {
+ g_object_unref (app->priv->proxy);
+ app->priv->proxy = NULL;
+ g_set_error (error,
+ GSM_APP_ERROR,
+ GSM_APP_ERROR_START,
+ "Unable to start application: unable to call Start on client");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+gsm_autostart_app_start (GsmApp *app,
+ GError **error)
+{
+ GsmAutostartApp *aapp;
+ gboolean ret;
+
+ aapp = GSM_AUTOSTART_APP (app);
+
+ g_return_val_if_fail (aapp->priv->desktop_file != NULL, FALSE);
+
+ switch (aapp->priv->launch_type) {
+ case AUTOSTART_LAUNCH_SPAWN:
+ ret = autostart_app_start_spawn (aapp, error);
+ break;
+ case AUTOSTART_LAUNCH_ACTIVATE:
+ ret = autostart_app_start_activate (aapp, error);
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ return ret;
}
static gboolean
@@ -642,6 +852,11 @@
g_object_set (app, "id", id, NULL);
+ if (! load_desktop_file (app)) {
+ g_object_unref (app);
+ app = NULL;
+ }
+
return G_OBJECT (app);
}
@@ -666,9 +881,9 @@
app_class->get_autorestart = gsm_autostart_app_get_autorestart;
g_object_class_install_property (object_class,
- PROP_DESKTOP_FILE,
- g_param_spec_string ("desktop-file",
- "Desktop file",
+ PROP_DESKTOP_FILENAME,
+ g_param_spec_string ("desktop-filename",
+ "Desktop filename",
"Freedesktop .desktop file",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
@@ -687,20 +902,13 @@
}
GsmApp *
-gsm_autostart_app_new (const char *desktop_file,
- const char *client_id)
+gsm_autostart_app_new (const char *desktop_file)
{
GsmAutostartApp *app;
app = g_object_new (GSM_TYPE_AUTOSTART_APP,
- "desktop-file", desktop_file,
- "client-id", client_id,
+ "desktop-filename", desktop_file,
NULL);
- if (app->priv->desktop_file == NULL) {
- g_object_unref (app);
- app = NULL;
- }
-
return GSM_APP (app);
}
Modified: branches/dbus_based/gnome-session/gsm-autostart-app.h
==============================================================================
--- branches/dbus_based/gnome-session/gsm-autostart-app.h (original)
+++ branches/dbus_based/gnome-session/gsm-autostart-app.h Thu Jun 19 00:39:22 2008
@@ -57,8 +57,7 @@
GType gsm_autostart_app_get_type (void) G_GNUC_CONST;
-GsmApp *gsm_autostart_app_new (const char *desktop_file,
- const char *client_id);
+GsmApp *gsm_autostart_app_new (const char *desktop_file);
G_END_DECLS
Modified: branches/dbus_based/gnome-session/gsm-manager.c
==============================================================================
--- branches/dbus_based/gnome-session/gsm-manager.c (original)
+++ branches/dbus_based/gnome-session/gsm-manager.c Thu Jun 19 00:39:22 2008
@@ -46,6 +46,7 @@
#include "gsm-xsmp-client.h"
#include "gsm-method-client.h"
+#include "gsm-service-client.h"
#include "gsm-autostart-app.h"
#include "gsm-resumed-app.h"
@@ -483,6 +484,84 @@
&data);
}
+static gboolean
+_app_has_client_id (const char *id,
+ GsmApp *app,
+ const char *client_id_a)
+{
+ const char *client_id_b;
+
+ client_id_b = gsm_app_get_client_id (app);
+
+ if (client_id_b == NULL) {
+ return FALSE;
+ }
+
+ return (strcmp (client_id_a, client_id_b) == 0);
+}
+
+static GsmApp *
+find_app_for_client_id (GsmManager *manager,
+ const char *client_id)
+{
+ GsmApp *found_app;
+ GSList *a;
+
+ found_app = NULL;
+
+ /* If we're starting up the session, try to match the new client
+ * with one pending apps for the current phase. If not, try to match
+ * with any of the autostarted apps. */
+ if (manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION) {
+ for (a = manager->priv->pending_apps; a != NULL; a = a->next) {
+ GsmApp *app = GSM_APP (a->data);
+
+ if (strcmp (client_id, gsm_app_get_client_id (app)) == 0) {
+ found_app = app;
+ goto out;
+ }
+ }
+ } else {
+ GsmApp *app;
+
+ app = g_hash_table_find (manager->priv->apps_by_id,
+ (GHRFunc)_app_has_client_id,
+ (char *)client_id);
+ if (app != NULL) {
+ found_app = app;
+ goto out;
+ }
+ }
+ out:
+ return found_app;
+}
+
+static void
+register_client_for_name (GsmManager *manager,
+ const char *dbus_name)
+{
+ GsmApp *app;
+ GsmClient *client;
+
+ app = find_app_for_client_id (manager, dbus_name);
+ if (app == NULL) {
+ return;
+ }
+
+ client = gsm_service_client_new (dbus_name);
+ if (client == NULL) {
+ g_warning ("GsmManager: Unable to create client for name '%s'", dbus_name);
+ return;
+ }
+
+ gsm_client_store_add (manager->priv->store, client);
+
+ gsm_client_set_app_id (client, gsm_app_get_id (app));
+ gsm_app_registered (app);
+
+ gsm_client_set_status (client, GSM_CLIENT_REGISTERED);
+}
+
static void
bus_name_owner_changed (DBusGProxy *bus_proxy,
const char *service_name,
@@ -490,12 +569,16 @@
const char *new_service_name,
GsmManager *manager)
{
- if (strlen (new_service_name) == 0) {
+ if (strlen (new_service_name) == 0
+ && strlen (old_service_name) > 0) {
/* service removed */
remove_clients_for_connection (manager, old_service_name);
- } else if (strlen (old_service_name) == 0) {
+ } else if (strlen (old_service_name) == 0
+ && strlen (new_service_name) > 0) {
/* service added */
-
+ if (new_service_name[0] == '/') {
+ register_client_for_name (manager, new_service_name);
+ }
}
}
@@ -508,7 +591,7 @@
manager->priv->connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
if (manager->priv->connection == NULL) {
if (error != NULL) {
- g_critical ("error getting system bus: %s", error->message);
+ g_critical ("error getting session bus: %s", error->message);
g_error_free (error);
}
exit (1);
@@ -560,22 +643,6 @@
return (strcmp (client_id_a, client_id_b) == 0);
}
-static gboolean
-_app_has_client_id (const char *id,
- GsmApp *app,
- const char *client_id_a)
-{
- const char *client_id_b;
-
- client_id_b = gsm_app_get_client_id (app);
-
- if (client_id_b == NULL) {
- return FALSE;
- }
-
- return (strcmp (client_id_a, client_id_b) == 0);
-}
-
static void
on_client_disconnected (GsmClient *client,
GsmManager *manager)
@@ -584,42 +651,6 @@
disconnect_client (manager, client);
}
-static GsmApp *
-find_app_for_client_id (GsmManager *manager,
- const char *client_id)
-{
- GsmApp *found_app;
- GSList *a;
-
- found_app = NULL;
-
- /* If we're starting up the session, try to match the new client
- * with one pending apps for the current phase. If not, try to match
- * with any of the autostarted apps. */
- if (manager->priv->phase < GSM_MANAGER_PHASE_APPLICATION) {
- for (a = manager->priv->pending_apps; a != NULL; a = a->next) {
- GsmApp *app = GSM_APP (a->data);
-
- if (strcmp (client_id, gsm_app_get_client_id (app)) == 0) {
- found_app = app;
- goto out;
- }
- }
- } else {
- GsmApp *app;
-
- app = g_hash_table_find (manager->priv->apps_by_id,
- (GHRFunc)_app_has_client_id,
- (char *)client_id);
- if (app != NULL) {
- found_app = app;
- goto out;
- }
- }
- out:
- return found_app;
-}
-
static gboolean
on_xsmp_client_register_request (GsmXSMPClient *client,
char **id,
@@ -868,13 +899,10 @@
if (app_path != NULL) {
GsmApp *app;
- char *client_id;
g_debug ("GsmManager: Found in: %s", app_path);
- client_id = gsm_util_generate_client_id ();
- app = gsm_autostart_app_new (app_path, client_id);
- g_free (client_id);
+ app = gsm_autostart_app_new (app_path);
g_free (app_path);
if (app != NULL) {
@@ -912,7 +940,6 @@
while ((name = g_dir_read_name (dir))) {
GsmApp *app;
char *desktop_file;
- char *client_id;
if (!g_str_has_suffix (name, ".desktop")) {
continue;
@@ -920,8 +947,7 @@
desktop_file = g_build_filename (path, name, NULL);
- client_id = gsm_util_generate_client_id ();
- app = gsm_autostart_app_new (desktop_file, client_id);
+ app = gsm_autostart_app_new (desktop_file);
if (app != NULL) {
g_debug ("GsmManager: read %s\n", desktop_file);
append_app (manager, app);
@@ -931,7 +957,6 @@
}
g_free (desktop_file);
- g_free (client_id);
}
g_dir_close (dir);
@@ -1030,11 +1055,7 @@
(GHRFunc)_find_app_provides,
(char *)service);
if (app == NULL) {
- char *client_id;
-
- client_id = gsm_util_generate_client_id ();
- app = gsm_autostart_app_new (default_provider, client_id);
- g_free (client_id);
+ app = gsm_autostart_app_new (default_provider);
if (app != NULL) {
append_app (manager, app);
g_object_unref (app);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]