[gnome-shell] Remove broken ShellAppSystem API and all consumers
- From: Colin Walters <walters src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Remove broken ShellAppSystem API and all consumers
- Date: Wed, 16 Mar 2011 19:06:36 +0000 (UTC)
commit fea8b6da2fd524bbdade67516c2d107eda3cf1f0
Author: Colin Walters <walters verbum org>
Date: Thu Mar 10 12:19:10 2011 -0500
Remove broken ShellAppSystem API and all consumers
In commit 9bd22dc0, I introduced an API to load an arbitrary
.desktop file, not necessarily from the menu path. It turns
out this function was broken because it created ShellApp instances
that were *different* from ones that were cached normally.
As far as I can tell, we didn't initially use it. Then later
Util.spawnDesktop was created which used this function.
Remove this broken function and all callers; if we're loading
.desktop files from *outside* the menu path, we can look at
readding.
This patch also kills off Util.spawnDesktop in favor of callers
talking to ShellAppSystem directly, now that the latter reports
errors.
https://bugzilla.gnome.org/show_bug.cgi?id=644402
js/misc/util.js | 41 ----------------------
js/ui/dateMenu.js | 3 +-
js/ui/status/accessibility.js | 3 +-
js/ui/status/power.js | 3 +-
js/ui/status/volume.js | 3 +-
js/ui/statusMenu.js | 6 ++-
src/shell-app-system.c | 75 +++++++++-------------------------------
src/shell-app-system.h | 3 --
8 files changed, 29 insertions(+), 108 deletions(-)
---
diff --git a/js/misc/util.js b/js/misc/util.js
index 1bc1a72..1112bef 100644
--- a/js/misc/util.js
+++ b/js/misc/util.js
@@ -55,20 +55,6 @@ function spawnCommandLine(command_line) {
}
}
-// spawnDesktop:
-// @id: a desktop file ID
-//
-// Spawns the desktop file identified by @id using startup notification,
-// etc, handling any errors that occur when trying to find or start
-// the program.
-function spawnDesktop(id) {
- try {
- trySpawnDesktop(id);
- } catch (err) {
- _handleSpawnError(id, err);
- }
-}
-
// trySpawn:
// @argv: an argv array
//
@@ -116,33 +102,6 @@ function trySpawnCommandLine(command_line) {
trySpawn(argv);
}
-// trySpawnDesktop:
-// @id: a desktop file ID
-//
-// Spawns the desktop file identified by @id using startup notification.
-// On error, throws an exception.
-function trySpawnDesktop(id) {
- let app;
-
- // shell_app_system_load_from_desktop_file() will end up returning
- // a stupid error message if the desktop file doesn't exist, but
- // that's the only case it returns an error for, so we just
- // substitute our own error in instead
- try {
- app = Shell.AppSystem.get_default().load_from_desktop_file(id + '.desktop');
- } catch (err) {
- throw new Error(_("No such application"));
- }
-
- try {
- app.launch();
- } catch(err) {
- // see trySpawn
- err.message = err.message.replace(/.*\((.+)\)/, '$1');
- throw err;
- }
-}
-
function _handleSpawnError(command, err) {
let title = _("Execution of '%s' failed:").format(command);
Main.notifyProblem(title, err.message);
diff --git a/js/ui/dateMenu.js b/js/ui/dateMenu.js
index 6af0b68..c0c8cea 100644
--- a/js/ui/dateMenu.js
+++ b/js/ui/dateMenu.js
@@ -200,7 +200,8 @@ DateMenuButton.prototype = {
_onPreferencesActivate: function() {
this.menu.close();
- Util.spawnDesktop('gnome-datetime-panel');
+ let app = Shell.AppSystem.get_default().get_app('gnome-datetime-panel.desktop');
+ app.activate(-1);
},
_onOpenCalendarActivate: function() {
diff --git a/js/ui/status/accessibility.js b/js/ui/status/accessibility.js
index 67b019e..b9cf723 100644
--- a/js/ui/status/accessibility.js
+++ b/js/ui/status/accessibility.js
@@ -91,7 +91,8 @@ ATIndicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Universal Access Settings"), function() {
- Util.spawnDesktop('gnome-universal-access-panel');
+ let app = Shell.AppSystem.get_default().get_app('gnome-universal-access-panel.desktop');
+ app.activate(-1);
});
},
diff --git a/js/ui/status/power.js b/js/ui/status/power.js
index fabb181..ca41f3a 100644
--- a/js/ui/status/power.js
+++ b/js/ui/status/power.js
@@ -83,7 +83,8 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Power Settings"),function() {
- Util.spawnDesktop('gnome-power-panel');
+ let app = Shell.AppSystem.get_default().get_app('gnome-power-panel.desktop');
+ app.activate(-1);
});
this._proxy.connect('Changed', Lang.bind(this, this._devicesChanged));
diff --git a/js/ui/status/volume.js b/js/ui/status/volume.js
index 36aa65d..29ffcee 100644
--- a/js/ui/status/volume.js
+++ b/js/ui/status/volume.js
@@ -64,7 +64,8 @@ Indicator.prototype = {
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
this.menu.addAction(_("Sound Settings"), function() {
- Util.spawnDesktop('gnome-sound-panel');
+ let app = Shell.AppSystem.get_default().get_app('gnome-sound-panel.desktop');
+ app.activate(-1);
});
this.actor.connect('scroll-event', Lang.bind(this, this._onScrollEvent));
diff --git a/js/ui/statusMenu.js b/js/ui/statusMenu.js
index 2a04506..26a4fe4 100644
--- a/js/ui/statusMenu.js
+++ b/js/ui/statusMenu.js
@@ -190,12 +190,14 @@ StatusMenuButton.prototype = {
_onMyAccountActivate: function() {
Main.overview.hide();
- Util.spawnDesktop('gnome-user-accounts-panel');
+ let app = Shell.AppSystem.get_default().get_app('gnome-user-accounts-panel.desktop');
+ app.activate(-1);
},
_onPreferencesActivate: function() {
Main.overview.hide();
- Util.spawnDesktop('gnome-control-center');
+ let app = Shell.AppSystem.get_default().get_app('gnome-control-center.desktop');
+ app.activate(-1);
},
_onLockScreenActivate: function() {
diff --git a/src/shell-app-system.c b/src/shell-app-system.c
index 519a830..9012540 100644
--- a/src/shell-app-system.c
+++ b/src/shell-app-system.c
@@ -159,20 +159,6 @@ shell_app_info_new_from_window (MetaWindow *window)
return info;
}
-static ShellAppInfo *
-shell_app_info_new_from_keyfile_take_ownership (GKeyFile *keyfile,
- const char *path)
-{
- ShellAppInfo *info;
-
- info = g_slice_alloc0 (sizeof (ShellAppInfo));
- info->type = SHELL_APP_INFO_TYPE_DESKTOP_FILE;
- info->refcount = 1;
- info->keyfile = keyfile;
- info->keyfile_path = g_strdup (path);
- return info;
-}
-
static void shell_app_system_class_init(ShellAppSystemClass *klass)
{
GObjectClass *gobject_class = (GObjectClass *)klass;
@@ -576,44 +562,6 @@ _shell_app_system_register_app (ShellAppSystem *self,
g_object_weak_ref (G_OBJECT (app), shell_app_system_on_app_weakref, ref);
}
-ShellAppInfo *
-shell_app_system_load_from_desktop_file (ShellAppSystem *system,
- const char *filename,
- GError **error)
-{
- ShellAppInfo *appinfo;
- GKeyFile *keyfile;
- char *full_path = NULL;
- gboolean success;
-
- keyfile = g_key_file_new ();
-
- if (strchr (filename, '/') != NULL)
- {
- success = g_key_file_load_from_file (keyfile, filename, G_KEY_FILE_NONE, error);
- full_path = g_strdup (filename);
- }
- else
- {
- char *app_path = g_build_filename ("applications", filename, NULL);
- success = g_key_file_load_from_data_dirs (keyfile, app_path, &full_path,
- G_KEY_FILE_NONE, error);
- g_free (app_path);
- }
-
- if (!success)
- {
- g_key_file_free (keyfile);
- g_free (full_path);
- return NULL;
- }
-
- appinfo = shell_app_info_new_from_keyfile_take_ownership (keyfile, full_path);
- g_free (full_path);
-
- return appinfo;
-}
-
/**
* shell_app_system_create_from_window:
*
@@ -1386,12 +1334,23 @@ shell_app_info_launch_full (ShellAppInfo *info,
shell_app = shell_app_system_get_app (shell_app_system_get_default (),
shell_app_info_get_id (info));
- ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
- G_APP_LAUNCH_CONTEXT (context),
- G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
- NULL, NULL,
- _gather_pid_callback, shell_app,
- error);
+ /* In the case where we know an app, we handle reaping the child internally,
+ * in the window tracker.
+ */
+ if (shell_app != NULL)
+ ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
+ G_APP_LAUNCH_CONTEXT (context),
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL,
+ _gather_pid_callback, shell_app,
+ error);
+ else
+ ret = g_desktop_app_info_launch_uris_as_manager (gapp, uris,
+ G_APP_LAUNCH_CONTEXT (context),
+ G_SPAWN_SEARCH_PATH,
+ NULL, NULL,
+ NULL, NULL,
+ error);
g_object_unref (G_OBJECT (gapp));
diff --git a/src/shell-app-system.h b/src/shell-app-system.h
index 3b615ce..b53c78d 100644
--- a/src/shell-app-system.h
+++ b/src/shell-app-system.h
@@ -81,9 +81,6 @@ ShellApp *shell_app_system_get_app_for_window (ShellAppSystem *sel
ShellApp *shell_app_system_lookup_heuristic_basename (ShellAppSystem *system,
const char *id);
-ShellAppInfo *shell_app_system_load_from_desktop_file (ShellAppSystem *system,
- const char *filename,
- GError **error);
ShellAppInfo *shell_app_system_create_from_window (ShellAppSystem *system,
MetaWindow *window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]