From a1e41b651970ffdb176b981c1bda38294ad37a3f Mon Sep 17 00:00:00 2001 From: Philip Chimento Date: Tue, 4 Oct 2016 22:27:18 -0700 Subject: [PATCH] WIP - Remove ShellJS gir 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. --- js/misc/extensionUtils.js | 11 ++--- src/Makefile.am | 32 ++----------- src/gnome-shell-extension-prefs.c | 17 ------- src/main.c | 15 ------ src/shell-js.cpp | 78 ------------------------------- src/shell-js.h | 16 ------- 6 files changed, 8 insertions(+), 161 deletions(-) delete mode 100644 src/shell-js.cpp delete mode 100644 src/shell-js.h 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 #include -#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 -#include -#include - -/** - * 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), - "", - 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 - -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__ */