diff --git a/js/ui/main.js b/js/ui/main.js index 4e68a371c..dfc9f9d38 100644 --- a/js/ui/main.js +++ b/js/ui/main.js @@ -6,8 +6,8 @@ function start() { let message = new Clutter.Label({font_name: "Sans Bold 64px", text: "DRAFT"}); message.set_opacity(75); - // Not working for unclear reasons - // message.set_rotation(Clutter.RotateAxis.Z_AXIS, - 45, 0, 0, 0); - message.set_position(100, 100); - global.get_overlay_group().add_actor(message); + message.set_anchor_point_from_gravity (Clutter.Gravity.CENTER); + message.set_rotation(Clutter.RotateAxis.Z_AXIS, - 45, 0, 0, 0); + message.set_position(global.screen_width / 2, global.screen_height / 2); + global.overlay_group.add_actor(message); } diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c index 154b44d40..5ff0a5a92 100644 --- a/src/gnome-shell-plugin.c +++ b/src/gnome-shell-plugin.c @@ -83,7 +83,6 @@ static gboolean do_init (const char *params) { MutterPlugin *plugin = mutter_get_plugin(); - ClutterActor *overlay_group; GError *error = NULL; int status; const char *shell_js; @@ -101,9 +100,6 @@ do_init (const char *params) } } - overlay_group = mutter_plugin_get_overlay_group (plugin); - shell_global_set_overlay_group (shell_global_get(), overlay_group); - shell_js = g_getenv("GNOME_SHELL_JS"); if (!shell_js) shell_js = JSDIR; @@ -112,6 +108,8 @@ do_init (const char *params) plugin_state->gjs_context = gjs_context_new_with_search_path(search_path); g_strfreev(search_path); + _shell_global_set_plugin (shell_global_get(), plugin); + if (!gjs_context_eval (plugin_state->gjs_context, "const Main = imports.ui.main; Main.start();", -1, diff --git a/src/metacity-symbols.c b/src/metacity-symbols.c index 84e42da89..b54207533 100644 --- a/src/metacity-symbols.c +++ b/src/metacity-symbols.c @@ -2,13 +2,6 @@ #include -void -mutter_plugin_query_screen_size (MutterPlugin *plugin, - int *width, - int *height) -{ -} - ClutterActor * mutter_plugin_get_overlay_group (MutterPlugin *plugin) { @@ -20,3 +13,16 @@ mutter_plugin_get_stage (MutterPlugin *plugin) { return NULL; } + +void +mutter_plugin_query_screen_size (MutterPlugin *plugin, + int *width, + int *height) +{ +} + +void +mutter_plugin_set_stage_input_area (MutterPlugin *plugin, + gint x, gint y, gint width, gint height) +{ +} diff --git a/src/shell-global.c b/src/shell-global.c index 4fbecd6a2..fac6b115c 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -1,25 +1,111 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ + #include "shell-global.h" struct _ShellGlobal { GObject parent; - ClutterActor *overlay_group; + MutterPlugin *plugin; }; struct _ShellGlobalClass { GObjectClass parent_class; }; +enum { + PROP_0, + + PROP_OVERLAY_GROUP, + PROP_SCREEN_WIDTH, + PROP_SCREEN_HEIGHT +}; + G_DEFINE_TYPE(ShellGlobal, shell_global, G_TYPE_OBJECT); +static void +shell_global_set_property(GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +shell_global_get_property(GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + ShellGlobal *global = SHELL_GLOBAL (object); + + switch (prop_id) + { + case PROP_OVERLAY_GROUP: + g_value_set_object (value, mutter_plugin_get_overlay_group (global->plugin)); + break; + case PROP_SCREEN_WIDTH: + { + int width, height; + + mutter_plugin_query_screen_size (global->plugin, &width, &height); + g_value_set_int (value, width); + } + break; + case PROP_SCREEN_HEIGHT: + { + int width, height; + + mutter_plugin_query_screen_size (global->plugin, &width, &height); + g_value_set_int (value, height); + } + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + static void shell_global_init(ShellGlobal *global) { } static void -shell_global_class_init(ShellGlobalClass *klass) +shell_global_class_init (ShellGlobalClass *klass) { + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->get_property = shell_global_get_property; + gobject_class->set_property = shell_global_set_property; + + g_object_class_install_property (gobject_class, + PROP_OVERLAY_GROUP, + g_param_spec_object ("overlay-group", + "Overlay Group", + "Actor holding objects that appear above the desktop contents", + CLUTTER_TYPE_ACTOR, + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_SCREEN_WIDTH, + g_param_spec_int ("screen-width", + "Screen Width", + "Screen width, in pixels", + 0, G_MAXINT, 1, + G_PARAM_READABLE)); + + g_object_class_install_property (gobject_class, + PROP_SCREEN_HEIGHT, + g_param_spec_int ("screen-height", + "Screen Height", + "Screen height, in pixels", + 0, G_MAXINT, 1, + G_PARAM_READABLE)); } ShellGlobal * @@ -34,25 +120,22 @@ shell_global_get (void) } void -shell_global_set_overlay_group (ShellGlobal *global, - ClutterActor *overlay_group) +shell_global_set_stage_input_area (ShellGlobal *global, + int x, + int y, + int width, + int height) { - g_object_ref (overlay_group); + g_return_if_fail (SHELL_IS_GLOBAL (global)); - if (global->overlay_group) - g_object_unref(global->overlay_group); - - global->overlay_group = overlay_group; -} - -ClutterActor * -shell_global_get_overlay_group (ShellGlobal *global) -{ - return global->overlay_group; + mutter_plugin_set_stage_input_area (global->plugin, x, y, width, height); } void -shell_global_print_hello (ShellGlobal *global) +_shell_global_set_plugin (ShellGlobal *global, + MutterPlugin *plugin) { - g_print("Hello World!\n"); + g_return_if_fail (SHELL_IS_GLOBAL (global)); + + global->plugin = plugin; } diff --git a/src/shell-global.h b/src/shell-global.h index 368a66cad..e90c3d36e 100644 --- a/src/shell-global.h +++ b/src/shell-global.h @@ -1,6 +1,7 @@ #ifndef __SHELL_GLOBAL_H__ #define __SHELL_GLOBAL_H__ +#include "mutter-plugin.h" #include #include @@ -20,12 +21,8 @@ GType shell_global_get_type (void) G_GNUC_CONST; ShellGlobal *shell_global_get (void); -void shell_global_set_overlay_group (ShellGlobal *global, - ClutterActor *overlay_group); - -ClutterActor *shell_global_get_overlay_group (ShellGlobal *global); - -void shell_global_print_hello (ShellGlobal *global); +void _shell_global_set_plugin (ShellGlobal *global, + MutterPlugin *plugin); G_END_DECLS