Global Menu in Gnome Shell, Progress and Problems.



Hi all,

This is so far I can get. The global menu window is created in
js/ui/panel.js with this patch.

(1) Is it plausible to put the widget into the top panel as done in
shell-tray-manager? If so perhaps some more general code that is ready
to be called by js will be better.

(2) If I set the user_data of root window to a widget, gnome shell won't
be able to obtain any events from it. I guess the reason is that Gtk
will consume all GdkEvents before gnome shell gets the prop-changed
notifications. Is there a way to work around this problem?

Regards,

Yu
Index: js/ui/panel.js
===================================================================
--- js/ui/panel.js	(revision 164)
+++ js/ui/panel.js	(working copy)
@@ -5,9 +5,13 @@
 const Meta = imports.gi.Meta;
 const Shell = imports.gi.Shell;
 const Tidy = imports.gi.Tidy;
+const Wnck = imports.gi.Wnck;
+const Gdk = imports.gi.Gdk;
 
 const Button = imports.ui.button;
 const Main = imports.ui.main;
+const Gtk = imports.gi.Gtk;
+const Gnomenu = imports.gi.Gnomenu;
 
 const PANEL_HEIGHT = 32;
 const TRAY_HEIGHT = 24;
@@ -26,6 +30,7 @@
 
         this._group = new Clutter.Group();
 
+
         let background = new Clutter.Rectangle({ color: PANEL_BACKGROUND_COLOR,
                                                  reactive: true,
                                                  width: global.screen_width+2,
@@ -72,6 +77,23 @@
             });
         this._traymanager.manage_stage(global.stage);
 
+		this._window = new Gtk.Window({type: Gtk.WindowType.TOPLEVEL});
+//		this._window.set_type_hint (Gdk.WindowTypeHint.DOCK);
+		this._window.set_accept_focus (false);
+		this._globalmenu = new Gnomenu.GlobalMenu();
+		this._globalmenu.visible = true;
+		this._window.add(this._globalmenu);
+		this._window.visible = true;
+
+		this._gmmonitor = new Gnomenu.Monitor();
+		this._gmmonitor.connect("window-changed", 
+			function (o, prev) {
+				var xid = me._gmmonitor.current_xid;
+				log("window changed = " + xid);
+				me._globalmenu.switch_to(xid);
+			});
+		this._gmmonitor.screen = this._window.get_screen();
+		
         // TODO: decide what to do with the rest of the panel in the overlay mode (make it fade-out, become non-reactive, etc.)
         // We get into the overlay mode on button-press-event as opposed to button-release-event because eventually we'll probably
         // have the overlay act like a menu that allows the user to release the mouse on the activity the user wants
Index: js/ui/overlay.js
===================================================================
--- js/ui/overlay.js	(revision 164)
+++ js/ui/overlay.js	(working copy)
@@ -59,8 +59,8 @@
 
         let searchIconTexture = new Clutter.Texture({ x: SIDESHOW_PAD + 2,
                                                       y: rect.y + 2 });
-        let searchIconPath = icontheme.lookup_icon('gtk-find', 16, 0).get_filename();
-        searchIconTexture.set_from_file(searchIconPath);
+        //let searchIconPath = icontheme.lookup_icon('gtk-find', 16, 0).get_filename();
+        //searchIconTexture.set_from_file(searchIconPath);
         this.actor.add_actor(searchIconTexture);
 
         // We need to initialize the text for the entry to have the cursor displayed 

Attachment: Screenshot-Untitled Window.jpeg
Description: JPEG image



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]