Compare commits
	
		
			1 Commits
		
	
	
		
			3.29.1
			...
			wip/ptomat
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					a1e41b6519 | 
@@ -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({
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								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);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
}
 | 
			
		||||
@@ -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__ */
 | 
			
		||||
		Reference in New Issue
	
	Block a user