summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Chimento <philip.chimento@gmail.com>2016-10-04 22:27:18 -0700
committerPhilip Chimento <philip.chimento@gmail.com>2016-10-04 22:27:18 -0700
commita1e41b651970ffdb176b981c1bda38294ad37a3f (patch)
tree03ff06af66230d3d3682f4e8c237267363b88e40
parent8c4926765821fc4eecce28d73e66ee89df82eb4c (diff)
downloadgnome-shell-wip/ptomato/remove-gjs-internal-api.tar.gz
WIP - Remove ShellJS girwip/ptomato/remove-gjs-internal-api
You can define a new importer object by importing a subdirectory in GJS. This is undocumented, but it is likely to at least hold until the whole thing moves to ES6 modules.
-rw-r--r--js/misc/extensionUtils.js11
-rw-r--r--src/Makefile.am32
-rw-r--r--src/gnome-shell-extension-prefs.c17
-rw-r--r--src/main.c15
-rw-r--r--src/shell-js.cpp78
-rw-r--r--src/shell-js.h16
6 files changed, 8 insertions, 161 deletions
diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
index 1d1221c35..3196bf51e 100644
--- a/js/misc/extensionUtils.js
+++ b/js/misc/extensionUtils.js
@@ -6,9 +6,7 @@
const Lang = imports.lang;
const Signals = imports.signals;
-const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
-const ShellJS = imports.gi.ShellJS;
const Config = imports.misc.config;
const FileUtils = imports.misc.fileUtils;
@@ -140,12 +138,11 @@ function createExtensionObject(uuid, dir, type) {
return extension;
}
-var _extension = null;
-
function installImporter(extension) {
- _extension = extension;
- ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path);
- _extension = null;
+ let oldSearchPath = imports.searchPath.slice(); // make a copy
+ imports.searchPath = [extension.path];
+ extension.imports = imports['.']; // "subdir" creates a new importer object
+ imports.searchPath = oldSearchPath;
}
const ExtensionFinder = new Lang.Class({
diff --git a/src/Makefile.am b/src/Makefile.am
index e9aacfe0c..506bf912c 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -78,7 +78,7 @@ gnome_shell_cflags = \
-DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\"
privlibdir = $(pkglibdir)
-privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell.la
+privlib_LTLIBRARIES = libgnome-shell-menu.la libgnome-shell.la
noinst_LTLIBRARIES += libgnome-shell-base.la
shell_built_sources = \
@@ -200,7 +200,7 @@ gnome_shell_CPPFLAGS = \
# Here, and after, we repeat mutter and bluetooth libraries just for the rpath
# The dependency is already pulled in by libtool
-gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
+gnome_shell_LDADD = libgnome-shell.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
gnome_shell_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
gnome_shell_DEPENDENCIES = libgnome-shell.la
@@ -212,7 +212,7 @@ nodist_gnome_shell_extension_prefs_SOURCES = \
$(top_builddir)/js/js-resources.h \
$(NULL)
gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags)
-gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
+gnome_shell_extension_prefs_LDADD = $(GNOME_SHELL_LIBS)
gnome_shell_extension_prefs_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
if HAVE_NETWORKMANAGER
@@ -226,30 +226,13 @@ nodist_gnome_shell_portal_helper_SOURCES = \
$(top_builddir)/js/js-resources.h \
$(NULL)
gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags)
-gnome_shell_portal_helper_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
+gnome_shell_portal_helper_LDADD = $(GNOME_SHELL_LIBS)
gnome_shell_portal_helper_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
endif
########################################
-libgnome_shell_js_la_SOURCES = \
- shell-js.h \
- shell-js.cpp \
- $(NULL)
-
-libgnome_shell_js_la_LIBADD = \
- $(GNOME_SHELL_JS_LIBS) \
- $(NULL)
-
-libgnome_shell_js_la_LDFLAGS = \
- -avoid-version
-
-libgnome_shell_js_la_CPPFLAGS = \
- $(GNOME_SHELL_JS_CFLAGS)
-
-########################################
-
shell_recorder_sources = \
shell-recorder.c \
shell-recorder.h
@@ -366,13 +349,6 @@ Shell_0_1_gir_SCANNERFLAGS = \
INTROSPECTION_GIRS += Shell-0.1.gir
CLEANFILES += Shell-0.1.gir
-ShellJS-0.1.gir: libgnome-shell-js.la
-ShellJS_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
-ShellJS_0_1_gir_LIBS = libgnome-shell-js.la
-ShellJS_0_1_gir_FILES = $(libgnome_shell_js_la_SOURCES)
-INTROSPECTION_GIRS += ShellJS-0.1.gir
-CLEANFILES += ShellJS-0.1.gir
-
St-1.0.gir: libst-1.0.la
St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION
diff --git a/src/gnome-shell-extension-prefs.c b/src/gnome-shell-extension-prefs.c
index 973f3c120..967e6156f 100644
--- a/src/gnome-shell-extension-prefs.c
+++ b/src/gnome-shell-extension-prefs.c
@@ -6,8 +6,6 @@
#include <gjs/gjs.h>
#include <glib/gi18n.h>
-#include "shell-js.h"
-
int
main (int argc, char *argv[])
{
@@ -51,18 +49,3 @@ main (int argc, char *argv[])
return 0;
}
-
-
-/* HACK:
- Add a dummy function that calls into libgnome-shell-js.so to ensure it's
- linked to /usr/bin/gnome-shell-extension-prefs even when linking with
- --as-needed. This function is never actually called.
- https://bugzilla.gnome.org/show_bug.cgi?id=670477
-*/
-void _shell_link_to_shell_js (void);
-
-void
-_shell_link_to_shell_js (void)
-{
- shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
-}
diff --git a/src/main.c b/src/main.c
index e8ac998cb..25d2778d0 100644
--- a/src/main.c
+++ b/src/main.c
@@ -25,7 +25,6 @@
#include "shell-global.h"
#include "shell-global-private.h"
-#include "shell-js.h"
#include "shell-perf-log.h"
#include "st.h"
@@ -480,17 +479,3 @@ main (int argc, char **argv)
return ecode;
}
-
-/* HACK:
- Add a dummy function that calls into libgnome-shell-js.so to ensure it's
- linked to /usr/bin/gnome-shell even when linking with --as-needed.
- This function is never actually called.
- https://bugzilla.gnome.org/show_bug.cgi?id=670477
-*/
-void _shell_link_to_shell_js (void);
-
-void
-_shell_link_to_shell_js (void)
-{
- shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
-}
diff --git a/src/shell-js.cpp b/src/shell-js.cpp
deleted file mode 100644
index 67345cb6a..000000000
--- a/src/shell-js.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-#include "config.h"
-
-#include "shell-js.h"
-
-#include <gio/gio.h>
-#include <gjs/gjs.h>
-#include <gjs/gjs-module.h>
-
-/**
- * shell_js_add_extension_importer:
- * @target_object_script: JavaScript code evaluating to a target object
- * @target_property: Name of property to use for importer
- * @directory: Source directory:
- * @error: A #GError
- *
- * This function sets a property named @target_property on the object
- * resulting from the evaluation of @target_object_script code, which
- * acts as a GJS importer for directory @directory.
- *
- * Returns: %TRUE on success
- */
-gboolean
-shell_js_add_extension_importer (const char *target_object_script,
- const char *target_property,
- const char *directory,
- GError **error)
-{
- JS::Value target_object;
- GList *contexts;
- JSContext *context;
- char *search_path[2] = { 0, 0 };
- gboolean ret = FALSE;
-
- /* Take the first GjsContext from all of them --
- * we should only ever have one context, so this
- * should be alright. */
- contexts = gjs_context_get_all ();
- context = (JSContext*) gjs_context_get_native_context ((GjsContext*)contexts->data);
- g_list_free_full (contexts, g_object_unref);
-
- JS_BeginRequest (context);
-
- /* This is a bit of a hack; ideally we'd be able to pass our target
- * object directly into this function, but introspection doesn't
- * support that at the moment. Instead evaluate a string to get it. */
- if (!JS_EvaluateScript(context,
- gjs_get_global_object (context),
- target_object_script,
- strlen (target_object_script),
- "<target_object_script>",
- 0,
- &target_object))
- {
- gjs_log_exception(context);
- g_set_error(error,
- G_IO_ERROR,
- G_IO_ERROR_FAILED,
- "Unable to import %s", target_object_script);
- goto out;
- }
-
- if (!target_object.isObject ())
- {
- g_error ("shell_js_add_extension_importer: invalid target object");
- goto out;
- }
-
- search_path[0] = (char*)directory;
- gjs_define_importer (context, &target_object.toObject (), target_property,
- (const char **)search_path, FALSE);
- ret = TRUE;
-
- out:
- JS_EndRequest (context);
- return ret;
-}
diff --git a/src/shell-js.h b/src/shell-js.h
deleted file mode 100644
index c00d3134b..000000000
--- a/src/shell-js.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-#ifndef __SHELL_JS_H__
-#define __SHELL_JS_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-gboolean shell_js_add_extension_importer (const char *target_object_script,
- const char *target_property,
- const char *directory,
- GError **error);
-
-G_END_DECLS
-
-#endif /* __SHELL_JS_H__ */