diff --git a/js/ui/panel.js b/js/ui/panel.js index b6e831069..e61557ab9 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -86,6 +86,7 @@ function _unpremultiply(color) { var AppMenuButton = new Lang.Class({ Name: 'AppMenuButton', Extends: PanelMenu.Button, + Signals: {'changed': {}}, _init(panel) { this.parent(0.0, null, true); @@ -127,7 +128,7 @@ var AppMenuButton = new Lang.Class({ this._visible = this._gtkSettings.gtk_shell_shows_app_menu && !Main.overview.visible; if (!this._visible) - this.actor.hide(); + this.hide(); this._overviewHidingId = Main.overview.connect('hiding', this._sync.bind(this)); this._overviewShowingId = Main.overview.connect('showing', this._sync.bind(this)); this._showsAppMenuId = this._gtkSettings.connect('notify::gtk-shell-shows-app-menu', @@ -155,7 +156,7 @@ var AppMenuButton = new Lang.Class({ this._visible = true; this.actor.reactive = true; - this.actor.show(); + this.show(); Tweener.removeTweens(this.actor); Tweener.addTween(this.actor, { opacity: 255, @@ -175,7 +176,7 @@ var AppMenuButton = new Lang.Class({ time: Overview.ANIMATION_TIME, transition: 'easeOutQuad', onComplete() { - this.actor.hide(); + this.hide(); }, onCompleteScope: this }); }, @@ -366,7 +367,7 @@ var AppMenuButton = new Lang.Class({ this._menuManager.addMenu(menu); }, - destroy() { + _onDestroy() { if (this._appStateChangedSignalId > 0) { let appSys = Shell.AppSystem.get_default(); appSys.disconnect(this._appStateChangedSignalId); @@ -398,8 +399,6 @@ var AppMenuButton = new Lang.Class({ } }); -Signals.addSignalMethods(AppMenuButton.prototype); - var ActivitiesButton = new Lang.Class({ Name: 'ActivitiesButton', Extends: PanelMenu.Button, diff --git a/js/ui/panelMenu.js b/js/ui/panelMenu.js index b23d8e49f..6f496db97 100644 --- a/js/ui/panelMenu.js +++ b/js/ui/panelMenu.js @@ -15,21 +15,21 @@ const PopupMenu = imports.ui.popupMenu; var ButtonBox = new Lang.Class({ Name: 'ButtonBox', + Extends: St.Widget, _init(params) { params = Params.parse(params, { style_class: 'panel-button' }, true); - this.actor = new Shell.GenericContainer(params); - this.actor._delegate = this; + + this.parent(params); + + this.actor = this; + this._delegate = this; this.container = new St.Bin({ y_fill: true, x_fill: true, child: this.actor }); - this.actor.connect('get-preferred-width', this._getPreferredWidth.bind(this)); - this.actor.connect('get-preferred-height', this._getPreferredHeight.bind(this)); - this.actor.connect('allocate', this._allocate.bind(this)); - - this.actor.connect('style-changed', this._onStyleChanged.bind(this)); + this.connect('style-changed', this._onStyleChanged.bind(this)); this._minHPadding = this._natHPadding = 0.0; }, @@ -40,31 +40,34 @@ var ButtonBox = new Lang.Class({ this._natHPadding = themeNode.get_length('-natural-hpadding'); }, - _getPreferredWidth(actor, forHeight, alloc) { - let child = actor.get_first_child(); + vfunc_get_preferred_width(forHeight) { + let child = this.get_first_child(); + let minimumSize, naturalSize; - if (child) { - [alloc.min_size, alloc.natural_size] = child.get_preferred_width(-1); - } else { - alloc.min_size = alloc.natural_size = 0; - } + if (child) + [minimumSize, naturalSize] = child.get_preferred_width(-1); + else + minimumSize = naturalSize = 0; - alloc.min_size += 2 * this._minHPadding; - alloc.natural_size += 2 * this._natHPadding; + minimumSize += 2 * this._minHPadding; + naturalSize += 2 * this._natHPadding; + + return [minimumSize, naturalSize]; }, - _getPreferredHeight(actor, forWidth, alloc) { - let child = actor.get_first_child(); + vfunc_get_preferred_height(forWidth) { + let child = this.get_first_child(); - if (child) { - [alloc.min_size, alloc.natural_size] = child.get_preferred_height(-1); - } else { - alloc.min_size = alloc.natural_size = 0; - } + if (child) + return child.get_preferred_height(-1); + + return [0, 0]; }, - _allocate(actor, box, flags) { - let child = actor.get_first_child(); + vfunc_allocate(box, flags) { + this.set_allocation(box, flags); + + let child = this.get_first_child(); if (!child) return; @@ -92,6 +95,7 @@ var ButtonBox = new Lang.Class({ var Button = new Lang.Class({ Name: 'PanelMenuButton', Extends: ButtonBox, + Signals: {'menu-set': {} }, _init(menuAlignment, nameText, dontCreateMenu) { this.parent({ reactive: true, @@ -100,8 +104,9 @@ var Button = new Lang.Class({ accessible_name: nameText ? nameText : "", accessible_role: Atk.Role.MENU }); - this.actor.connect('event', this._onEvent.bind(this)); - this.actor.connect('notify::visible', this._onVisibilityChanged.bind(this)); + this.connect('event', this._onEvent.bind(this)); + this.connect('notify::visible', this._onVisibilityChanged.bind(this)); + this.connect('destroy', this._onDestroy.bind(this)); if (dontCreateMenu) this.menu = new PopupMenu.PopupDummyMenu(this.actor); @@ -110,9 +115,9 @@ var Button = new Lang.Class({ }, setSensitive(sensitive) { - this.actor.reactive = sensitive; - this.actor.can_focus = sensitive; - this.actor.track_hover = sensitive; + this.reactive = sensitive; + this.can_focus = sensitive; + this.track_hover = sensitive; }, setMenu(menu) { @@ -184,17 +189,11 @@ var Button = new Lang.Class({ this.menu.actor.style = ('max-height: %spx;').format(maxHeight); }, - destroy() { - this.actor._delegate = null; - + _onDestroy() { if (this.menu) this.menu.destroy(); - this.actor.destroy(); - - this.emit('destroy'); } }); -Signals.addSignalMethods(Button.prototype); /* SystemIndicator: *