cleanup: Replace signal connections with virtual functions

Inheriting from actors allows to use virtual functions instead of signal
connections for multiple cases, so just use them when possible.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559
This commit is contained in:
Marco Trevisan (Treviño) 2019-09-10 07:42:48 +02:00 committed by Florian Müllner
parent 320df13b65
commit 55b57421dc
30 changed files with 434 additions and 414 deletions

View File

@ -81,11 +81,6 @@ var AuthPrompt = GObject.registerClass({
}); });
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('key-press-event', (actor, event) => {
if (event.get_key_symbol() == Clutter.KEY_Escape)
this.cancel();
return Clutter.EVENT_PROPAGATE;
});
this._userWell = new St.Bin({ x_fill: true, x_align: St.Align.START }); this._userWell = new St.Bin({ x_fill: true, x_align: St.Align.START });
this.add(this._userWell, { this.add(this._userWell, {
@ -145,6 +140,12 @@ var AuthPrompt = GObject.registerClass({
this._userVerifier = null; this._userVerifier = null;
} }
vfunc_key_press_event(keyPressEvent) {
if (keyPressEvent.keyval == Clutter.KEY_Escape)
this.cancel();
return Clutter.EVENT_PROPAGATE;
}
_initButtons() { _initButtons() {
this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button', this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE, button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,

View File

@ -74,7 +74,6 @@ var UserListItem = GObject.registerClass({
visible: false }); visible: false });
layout.add(this._timedLoginIndicator); layout.add(this._timedLoginIndicator);
this.connect('clicked', this._onClicked.bind(this));
this._onUserChanged(); this._onUserChanged();
} }
@ -103,7 +102,7 @@ var UserListItem = GObject.registerClass({
this.user.disconnect(this._userChangedId); this.user.disconnect(this._userChangedId);
} }
_onClicked() { vfunc_clicked() {
this.emit('activate'); this.emit('activate');
} }
@ -173,8 +172,10 @@ var UserList = GObject.registerClass({
this.add_actor(this._box); this.add_actor(this._box);
this._items = {}; this._items = {};
}
this.connect('key-focus-in', this._moveFocusToItems.bind(this)); vfunc_key_focus_in() {
this._moveFocusToItems();
} }
_moveFocusToItems() { _moveFocusToItems() {

View File

@ -373,18 +373,6 @@ var AllView = GObject.registerClass({
this._displayingPopup = false; this._displayingPopup = false;
}); });
this.connect('notify::mapped', () => {
if (this.mapped) {
this._keyPressEventId =
global.stage.connect('key-press-event',
this._onKeyPressEvent.bind(this));
} else {
if (this._keyPressEventId)
global.stage.disconnect(this._keyPressEventId);
this._keyPressEventId = 0;
}
});
this._redisplayWorkId = Main.initializeDeferredWork(this, this._redisplay.bind(this)); this._redisplayWorkId = Main.initializeDeferredWork(this, this._redisplay.bind(this));
Shell.AppSystem.get_default().connect('installed-changed', () => { Shell.AppSystem.get_default().connect('installed-changed', () => {
@ -401,6 +389,21 @@ var AllView = GObject.registerClass({
this._nEventBlockerInhibits = 0; this._nEventBlockerInhibits = 0;
} }
vfunc_map() {
this._keyPressEventId =
global.stage.connect('key-press-event',
this._onKeyPressEvent.bind(this));
super.vfunc_map();
}
vfunc_unmap() {
if (this._keyPressEventId) {
global.stage.disconnect(this._keyPressEventId);
this._keyPressEventId = 0;
}
super.vfunc_unmap();
}
_redisplay() { _redisplay() {
super._redisplay(); super._redisplay();
this._refilterApps(); this._refilterApps();
@ -904,11 +907,11 @@ class FrequentView extends BaseAppView {
this._noFrequentAppsLabel.hide(); this._noFrequentAppsLabel.hide();
this._usage = Shell.AppUsage.get_default(); this._usage = Shell.AppUsage.get_default();
}
this.connect('notify::mapped', () => { vfunc_map() {
if (this.mapped)
this._redisplay(); this._redisplay();
}); super.vfunc_map();
} }
hasUsefulData() { hasUsefulData() {
@ -1486,17 +1489,9 @@ var FolderIcon = GObject.registerClass({
this._popupTimeoutId = 0; this._popupTimeoutId = 0;
this.connect('leave-event', this._onLeaveEvent.bind(this));
this.connect('button-press-event', this._onButtonPress.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this));
this.connect('popup-menu', this._popupRenamePopup.bind(this)); this.connect('popup-menu', this._popupRenamePopup.bind(this));
this.connect('clicked', this.open.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::mapped', () => {
if (!this.mapped && this._popup)
this._popup.popdown();
});
this._folder.connect('changed', this._redisplay.bind(this)); this._folder.connect('changed', this._redisplay.bind(this));
this._redisplay(); this._redisplay();
@ -1519,6 +1514,17 @@ var FolderIcon = GObject.registerClass({
this._removeMenuTimeout(); this._removeMenuTimeout();
} }
vfunc_clicked() {
this.open();
}
vfunc_unmap() {
super.vfunc_unmap();
if (this._popup)
this._popup.popdown();
}
open() { open() {
this._removeMenuTimeout(); this._removeMenuTimeout();
this._ensurePopup(); this._ensurePopup();
@ -1701,24 +1707,29 @@ var FolderIcon = GObject.registerClass({
'[gnome-shell] this._popupRenamePopup'); '[gnome-shell] this._popupRenamePopup');
} }
_onLeaveEvent(_actor, _event) { vfunc_leave_event(crossingEvent) {
let ret = super.vfunc_leave_event(crossingEvent);
this.fake_release(); this.fake_release();
this._removeMenuTimeout(); this._removeMenuTimeout();
return ret;
} }
_onButtonPress(_actor, event) { vfunc_button_press_event(buttonEvent) {
let button = event.get_button(); super.vfunc_button_press_event(buttonEvent);
if (button == 1) {
if (buttonEvent.button == 1) {
this._setPopupTimeout(); this._setPopupTimeout();
} else if (button == 3) { } else if (buttonEvent.button == 3) {
this._popupRenamePopup(); this._popupRenamePopup();
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() == Clutter.EventType.TOUCH_BEGIN) super.vfunc_touch_event(touchEvent);
if (touchEvent.type == Clutter.EventType.TOUCH_BEGIN)
this._setPopupTimeout(); this._setPopupTimeout();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@ -1912,7 +1923,6 @@ var AppFolderPopup = GObject.registerClass({
actionMode: Shell.ActionMode.POPUP actionMode: Shell.ActionMode.POPUP
}); });
this._grabHelper.addActor(Main.layoutManager.overviewGroup); this._grabHelper.addActor(Main.layoutManager.overviewGroup);
this.connect('key-press-event', this._onKeyPress.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
} }
@ -1924,8 +1934,8 @@ var AppFolderPopup = GObject.registerClass({
} }
} }
_onKeyPress(actor, event) { vfunc_key_press_event(keyEvent) {
if (global.stage.get_key_focus() != actor) if (global.stage.get_key_focus() != this)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
// Since we need to only grab focus on one item child when the user // Since we need to only grab focus on one item child when the user
@ -1947,7 +1957,7 @@ var AppFolderPopup = GObject.registerClass({
// languages // languages
let direction; let direction;
let isLtr = Clutter.get_default_text_direction() == Clutter.TextDirection.LTR; let isLtr = Clutter.get_default_text_direction() == Clutter.TextDirection.LTR;
switch (event.get_key_symbol()) { switch (keyEvent.keyval) {
case Clutter.Down: case Clutter.Down:
direction = St.DirectionType.TAB_FORWARD; direction = St.DirectionType.TAB_FORWARD;
break; break;
@ -1967,7 +1977,7 @@ var AppFolderPopup = GObject.registerClass({
default: default:
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
return actor.navigate_focus(null, direction, false); return this.navigate_focus(null, direction, false);
} }
toggle() { toggle() {
@ -2085,10 +2095,6 @@ var AppIcon = GObject.registerClass({
this.label_actor = this.icon.label; this.label_actor = this.icon.label;
this.connect('leave-event', this._onLeaveEvent.bind(this));
this.connect('button-press-event', this._onButtonPress.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this));
this.connect('clicked', this._onClicked.bind(this));
this.connect('popup-menu', this._onKeyboardPopupMenu.bind(this)); this.connect('popup-menu', this._onKeyboardPopupMenu.bind(this));
this._menu = null; this._menu = null;
@ -2174,30 +2180,34 @@ var AppIcon = GObject.registerClass({
GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu'); GLib.Source.set_name_by_id(this._menuTimeoutId, '[gnome-shell] this.popupMenu');
} }
_onLeaveEvent(_actor, _event) { vfunc_leave_event(crossingEvent) {
let ret = super.vfunc_leave_event(crossingEvent);
this.fake_release(); this.fake_release();
this._removeMenuTimeout(); this._removeMenuTimeout();
return ret;
} }
_onButtonPress(_actor, event) { vfunc_button_press_event(buttonEvent) {
let button = event.get_button(); super.vfunc_button_press_event(buttonEvent);
if (button == 1) { if (buttonEvent.button == 1) {
this._setPopupTimeout(); this._setPopupTimeout();
} else if (button == 3) { } else if (buttonEvent.button == 3) {
this.popupMenu(); this.popupMenu();
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() == Clutter.EventType.TOUCH_BEGIN) super.vfunc_touch_event(touchEvent);
if (touchEvent.type == Clutter.EventType.TOUCH_BEGIN)
this._setPopupTimeout(); this._setPopupTimeout();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onClicked(actor, button) { vfunc_clicked(button) {
this._removeMenuTimeout(); this._removeMenuTimeout();
this.activate(button); this.activate(button);
} }

View File

@ -46,12 +46,18 @@ var BoxPointer = GObject.registerClass({
this.add_actor(this._border); this.add_actor(this._border);
this.bin.raise(this._border); this.bin.raise(this._border);
this._sourceAlignment = 0.5; this._sourceAlignment = 0.5;
this._capturedEventId = 0; this._muteInput = true;
this._muteInput();
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
} }
vfunc_captured_event() {
if (this._muteInput)
return Clutter.EVENT_STOP;
return Clutter.EVENT_PROPAGATE;
}
_onDestroy() { _onDestroy() {
if (this._sourceActorDestroyId) { if (this._sourceActorDestroyId) {
this._sourceActor.disconnect(this._sourceActorDestroyId); this._sourceActor.disconnect(this._sourceActorDestroyId);
@ -63,19 +69,6 @@ var BoxPointer = GObject.registerClass({
return this._arrowSide; return this._arrowSide;
} }
_muteInput() {
if (this._capturedEventId == 0)
this._capturedEventId = this.connect('captured-event',
() => Clutter.EVENT_STOP);
}
_unmuteInput() {
if (this._capturedEventId != 0) {
this.disconnect(this._capturedEventId);
this._capturedEventId = 0;
}
}
open(animate, onComplete) { open(animate, onComplete) {
let themeNode = this.get_theme_node(); let themeNode = this.get_theme_node();
let rise = themeNode.get_length('-arrow-rise'); let rise = themeNode.get_length('-arrow-rise');
@ -112,7 +105,7 @@ var BoxPointer = GObject.registerClass({
duration: animationTime, duration: animationTime,
mode: Clutter.AnimationMode.LINEAR, mode: Clutter.AnimationMode.LINEAR,
onComplete: () => { onComplete: () => {
this._unmuteInput(); this._muteInput = false;
if (onComplete) if (onComplete)
onComplete(); onComplete();
} }
@ -147,7 +140,7 @@ var BoxPointer = GObject.registerClass({
} }
} }
this._muteInput(); this._muteInput = true;
this.remove_all_transitions(); this.remove_all_transitions();
this.ease({ this.ease({

View File

@ -352,8 +352,6 @@ var Calendar = GObject.registerClass({
reactive: true reactive: true
}); });
this.connect('scroll-event', this._onScroll.bind(this));
this._buildHeader (); this._buildHeader ();
} }
@ -446,8 +444,8 @@ var Calendar = GObject.registerClass({
this._firstDayIndex = this.get_n_children(); this._firstDayIndex = this.get_n_children();
} }
_onScroll(actor, event) { vfunc_scroll_event(scrollEvent) {
switch (event.get_scroll_direction()) { switch (scrollEvent.direction) {
case Clutter.ScrollDirection.UP: case Clutter.ScrollDirection.UP:
case Clutter.ScrollDirection.LEFT: case Clutter.ScrollDirection.LEFT:
this._onPrevMonthButtonClicked(); this._onPrevMonthButtonClicked();
@ -668,11 +666,12 @@ class EventMessage extends MessageList.Message {
this._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' }); this._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' });
this.setIcon(this._icon); this.setIcon(this._icon);
}
this.connect('style-changed', () => { vfunc_style_changed() {
let iconVisible = this.get_parent().has_style_pseudo_class('first-child'); let iconVisible = this.get_parent().has_style_pseudo_class('first-child');
this._icon.opacity = (iconVisible ? 255 : 0); this._icon.opacity = (iconVisible ? 255 : 0);
}); super.vfunc_style_changed();
} }
_formatEventTime() { _formatEventTime() {
@ -750,7 +749,7 @@ class NotificationMessage extends MessageList.Message {
this.setUseBodyMarkup(n.bannerBodyMarkup); this.setUseBodyMarkup(n.bannerBodyMarkup);
} }
_onClicked() { vfunc_clicked() {
this.notification.activate(); this.notification.activate();
} }
@ -910,6 +909,23 @@ class EventsSection extends MessageList.MessageListSection {
} }
}); });
var TimeLabel = GObject.registerClass(
class NotificationTimeLabel extends St.Label {
_init(datetime) {
super._init({
style_class: 'event-time',
x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.END
});
this._datetime = datetime;
}
vfunc_map() {
this.text = Util.formatTimeSpan(this._datetime);
super.vfunc_map();
}
});
var NotificationSection = GObject.registerClass( var NotificationSection = GObject.registerClass(
class NotificationSection extends MessageList.MessageListSection { class NotificationSection extends MessageList.MessageListSection {
_init() { _init() {
@ -922,8 +938,6 @@ class NotificationSection extends MessageList.MessageListSection {
Main.messageTray.getSources().forEach(source => { Main.messageTray.getSources().forEach(source => {
this._sourceAdded(Main.messageTray, source); this._sourceAdded(Main.messageTray, source);
}); });
this.connect('notify::mapped', this._onMapped.bind(this));
} }
get allowed() { get allowed() {
@ -931,17 +945,6 @@ class NotificationSection extends MessageList.MessageListSection {
!Main.sessionMode.isGreeter; !Main.sessionMode.isGreeter;
} }
_createTimeLabel(datetime) {
let label = new St.Label({ style_class: 'event-time',
x_align: Clutter.ActorAlign.START,
y_align: Clutter.ActorAlign.END });
label.connect('notify::mapped', () => {
if (label.mapped)
label.text = Util.formatTimeSpan(datetime);
});
return label;
}
_sourceAdded(tray, source) { _sourceAdded(tray, source) {
let obj = { let obj = {
destroyId: 0, destroyId: 0,
@ -959,12 +962,12 @@ class NotificationSection extends MessageList.MessageListSection {
_onNotificationAdded(source, notification) { _onNotificationAdded(source, notification) {
let message = new NotificationMessage(notification); let message = new NotificationMessage(notification);
message.setSecondaryActor(this._createTimeLabel(notification.datetime)); message.setSecondaryActor(new TimeLabel(notification.datetime));
let isUrgent = notification.urgency == MessageTray.Urgency.CRITICAL; let isUrgent = notification.urgency == MessageTray.Urgency.CRITICAL;
let updatedId = notification.connect('updated', () => { let updatedId = notification.connect('updated', () => {
message.setSecondaryActor(this._createTimeLabel(notification.datetime)); message.setSecondaryActor(new TimeLabel(notification.datetime));
this.moveMessage(message, isUrgent ? 0 : this._nUrgent, this.mapped); this.moveMessage(message, isUrgent ? 0 : this._nUrgent, this.mapped);
}); });
let destroyId = notification.connect('destroy', () => { let destroyId = notification.connect('destroy', () => {
@ -995,14 +998,12 @@ class NotificationSection extends MessageList.MessageListSection {
this._sources.delete(source); this._sources.delete(source);
} }
_onMapped() { vfunc_map() {
if (!this.mapped)
return;
this._messages.forEach(message => { this._messages.forEach(message => {
if (message.notification.urgency != MessageTray.Urgency.CRITICAL) if (message.notification.urgency != MessageTray.Urgency.CRITICAL)
message.notification.acknowledged = true; message.notification.acknowledged = true;
}); });
super.vfunc_map();
} }
_shouldShow() { _shouldShow() {

View File

@ -42,9 +42,6 @@ class TodayButton extends St.Button {
can_focus: true, can_focus: true,
reactive: false reactive: false
}); });
this.connect('clicked', () => {
this._calendar.setDate(new Date(), false);
});
let hbox = new St.BoxLayout({ vertical: true }); let hbox = new St.BoxLayout({ vertical: true });
this.add_actor(hbox); this.add_actor(hbox);
@ -64,6 +61,10 @@ class TodayButton extends St.Button {
}); });
} }
vfunc_clicked() {
this._calendar.setDate(new Date(), false);
}
setDate(date) { setDate(date) {
this._dayLabel.set_text(date.toLocaleFormat('%A')); this._dayLabel.set_text(date.toLocaleFormat('%A'));
@ -97,14 +98,6 @@ class WorldClocksSection extends St.Button {
this._locations = []; this._locations = [];
this.connect('clicked', () => {
if (this._clocksApp)
this._clocksApp.activate();
Main.overview.hide();
Main.panel.closeCalendar();
});
let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL }); let layout = new Clutter.GridLayout({ orientation: Clutter.Orientation.VERTICAL });
this._grid = new St.Widget({ style_class: 'world-clocks-grid', this._grid = new St.Widget({ style_class: 'world-clocks-grid',
layout_manager: layout }); layout_manager: layout });
@ -133,6 +126,14 @@ class WorldClocksSection extends St.Button {
this._sync(); this._sync();
} }
vfunc_clicked() {
if (this._clocksApp)
this._clocksApp.activate();
Main.overview.hide();
Main.panel.closeCalendar();
}
_sync() { _sync() {
this._clocksApp = this._appSystem.lookup_app('org.gnome.clocks.desktop'); this._clocksApp = this._appSystem.lookup_app('org.gnome.clocks.desktop');
this.visible = this._clocksApp != null; this.visible = this._clocksApp != null;
@ -257,17 +258,6 @@ class WeatherSection extends St.Button {
this._weatherClient = new Weather.WeatherClient(); this._weatherClient = new Weather.WeatherClient();
this.connect('clicked', () => {
this._weatherClient.activateApp();
Main.overview.hide();
Main.panel.closeCalendar();
});
this.connect('notify::mapped', () => {
if (this.mapped)
this._weatherClient.update();
});
let box = new St.BoxLayout({ style_class: 'weather-box', let box = new St.BoxLayout({ style_class: 'weather-box',
vertical: true }); vertical: true });
@ -294,6 +284,18 @@ class WeatherSection extends St.Button {
this._sync(); this._sync();
} }
vfunc_map() {
this._weatherClient.update();
super.vfunc_map();
}
vfunc_clicked() {
this._weatherClient.activateApp();
Main.overview.hide();
Main.panel.closeCalendar();
}
_getInfos() { _getInfos() {
let info = this._weatherClient.info; let info = this._weatherClient.info;
let forecasts = info.get_forecast_list(); let forecasts = info.get_forecast_list();

View File

@ -47,19 +47,6 @@ var CandidateArea = GObject.registerClass({
}); });
} }
this.connect('scroll-event', (actor, event) => {
let direction = event.get_scroll_direction();
switch (direction) {
case Clutter.ScrollDirection.UP:
this.emit('cursor-up');
break;
case Clutter.ScrollDirection.DOWN:
this.emit('cursor-down');
break;
}
return Clutter.EVENT_PROPAGATE;
});
this._buttonBox = new St.BoxLayout({ style_class: 'candidate-page-button-box' }); this._buttonBox = new St.BoxLayout({ style_class: 'candidate-page-button-box' });
this._previousButton = new St.Button({ style_class: 'candidate-page-button candidate-page-button-previous button' }); this._previousButton = new St.Button({ style_class: 'candidate-page-button candidate-page-button-previous button' });
@ -83,6 +70,18 @@ var CandidateArea = GObject.registerClass({
this._cursorPosition = 0; this._cursorPosition = 0;
} }
vfunc_scroll_event(scrollEvent) {
switch (scrollEvent.direction) {
case Clutter.ScrollDirection.UP:
this.emit('cursor-up');
break;
case Clutter.ScrollDirection.DOWN:
this.emit('cursor-down');
break;
}
return Clutter.EVENT_PROPAGATE;
}
setOrientation(orientation) { setOrientation(orientation) {
if (this._orientation == orientation) if (this._orientation == orientation)
return; return;

View File

@ -231,18 +231,18 @@ var IconGrid = GObject.registerClass({
this._fixedHItemSize = this._fixedVItemSize = undefined; this._fixedHItemSize = this._fixedVItemSize = undefined;
this.connect('style-changed', this._onStyleChanged.bind(this)); this.connect('style-changed', this._onStyleChanged.bind(this));
// Cancel animations when hiding the overview, to avoid icons
// swarming into the void ...
this.connect('notify::mapped', () => {
if (!this.mapped)
this._resetAnimationActors();
});
this.connect('actor-added', this._childAdded.bind(this)); this.connect('actor-added', this._childAdded.bind(this));
this.connect('actor-removed', this._childRemoved.bind(this)); this.connect('actor-removed', this._childRemoved.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
} }
vfunc_unmap() {
// Cancel animations when hiding the overview, to avoid icons
// swarming into the void ...
this._resetAnimationActors();
super.vfunc_unmap();
}
_onDestroy() { _onDestroy() {
if (this._updateIconSizesLaterId) { if (this._updateIconSizesLaterId) {
Meta.later_remove (this._updateIconSizesLaterId); Meta.later_remove (this._updateIconSizesLaterId);

View File

@ -895,8 +895,6 @@ var EmojiSelection = GObject.registerClass({
this._populateSections(); this._populateSections();
this.connect('notify::mapped', () => this._emojiPager.setCurrentPage(0));
this._emojiPager = new EmojiPager(this._sections, 11, 3); this._emojiPager = new EmojiPager(this._sections, 11, 3);
this._emojiPager.connect('page-changed', (pager, sectionLabel, page, nPages) => { this._emojiPager.connect('page-changed', (pager, sectionLabel, page, nPages) => {
this._onPageChanged(sectionLabel, page, nPages); this._onPageChanged(sectionLabel, page, nPages);
@ -918,6 +916,16 @@ var EmojiSelection = GObject.registerClass({
this._emojiPager.setCurrentPage(0); this._emojiPager.setCurrentPage(0);
} }
vfunc_map() {
this._emojiPager.setCurrentPage(0);
super.vfunc_map();
}
vfunc_unmap() {
super.vfunc_unmap();
this._emojiPager.setCurrentPage(0);
}
_onPageChanged(sectionLabel, page, nPages) { _onPageChanged(sectionLabel, page, nPages) {
this._pageIndicator.setNPages(nPages); this._pageIndicator.setNPages(nPages);
this._pageIndicator.setCurrentPage(page); this._pageIndicator.setCurrentPage(page);

View File

@ -1212,8 +1212,6 @@ class HotCorner extends Clutter.Actor {
this._corner.set_position(0, 0); this._corner.set_position(0, 0);
} }
this.connect('leave-event', this._onEnvironsLeft.bind(this));
this._corner.connect('enter-event', this._corner.connect('enter-event',
this._onCornerEntered.bind(this)); this._onCornerEntered.bind(this));
this._corner.connect('leave-event', this._corner.connect('leave-event',
@ -1263,8 +1261,8 @@ class HotCorner extends Clutter.Actor {
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onEnvironsLeft(actor, event) { vfunc_leave_event(crossingEvent) {
if (event.get_related() != this._corner) if (crossingEvent.related != this._corner)
this._entered = false; this._entered = false;
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }

View File

@ -264,13 +264,12 @@ class ObjLink extends St.Button {
label: text label: text
}); });
this.get_child().single_line_mode = true; this.get_child().single_line_mode = true;
this.connect('clicked', this._onClicked.bind(this));
this._obj = o; this._obj = o;
this._lookingGlass = lookingGlass; this._lookingGlass = lookingGlass;
} }
_onClicked() { vfunc_clicked() {
this._lookingGlass.inspectObject(this._obj, this); this._lookingGlass.inspectObject(this._obj, this);
} }
}); });
@ -797,8 +796,6 @@ class LookingGlass extends St.BoxLayout {
// Sort of magic, but...eh. // Sort of magic, but...eh.
this._maxItems = 150; this._maxItems = 150;
this.connect('key-press-event', this._globalKeyPressEvent.bind(this));
this._interfaceSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' }); this._interfaceSettings = new Gio.Settings({ schema_id: 'org.gnome.desktop.interface' });
this._interfaceSettings.connect('changed::monospace-font-name', this._interfaceSettings.connect('changed::monospace-font-name',
this._updateFont.bind(this)); this._updateFont.bind(this));
@ -1076,9 +1073,8 @@ class LookingGlass extends St.BoxLayout {
} }
// Handle key events which are relevant for all tabs of the LookingGlass // Handle key events which are relevant for all tabs of the LookingGlass
_globalKeyPressEvent(actor, event) { vfunc_key_press_event(keyPressEvent) {
let symbol = event.get_key_symbol(); let symbol = keyPressEvent.keyval;
let modifierState = event.get_state();
if (symbol == Clutter.Escape) { if (symbol == Clutter.Escape) {
if (this._objInspector.visible) { if (this._objInspector.visible) {
this._objInspector.close(); this._objInspector.close();
@ -1088,7 +1084,7 @@ class LookingGlass extends St.BoxLayout {
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
// Ctrl+PgUp and Ctrl+PgDown switches tabs in the notebook view // Ctrl+PgUp and Ctrl+PgDown switches tabs in the notebook view
if (modifierState & Clutter.ModifierType.CONTROL_MASK) { if (keyPressEvent.modifier_state & Clutter.ModifierType.CONTROL_MASK) {
if (symbol == Clutter.KEY_Page_Up) { if (symbol == Clutter.KEY_Page_Up) {
this._notebook.prevTab(); this._notebook.prevTab();
} else if (symbol == Clutter.KEY_Page_Down) { } else if (symbol == Clutter.KEY_Page_Down) {

View File

@ -56,38 +56,43 @@ class URLHighlighter extends St.Label {
this.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR; this.clutter_text.line_wrap_mode = Pango.WrapMode.WORD_CHAR;
this.setMarkup(text, allowMarkup); this.setMarkup(text, allowMarkup);
this.connect('button-press-event', (actor, event) => { }
vfunc_button_press_event(buttonEvent) {
// Don't try to URL highlight when invisible. // Don't try to URL highlight when invisible.
// The MessageTray doesn't actually hide us, so // The MessageTray doesn't actually hide us, so
// we need to check for paint opacities as well. // we need to check for paint opacities as well.
if (!actor.visible || actor.get_paint_opacity() == 0) if (!this.visible || this.get_paint_opacity() == 0)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
// Keep Notification.actor from seeing this and taking // Keep Notification from seeing this and taking
// a pointer grab, which would block our button-release-event // a pointer grab, which would block our button-release-event
// handler, if an URL is clicked // handler, if an URL is clicked
return this._findUrlAtPos(event) != -1; return this._findUrlAtPos(buttonEvent) != -1;
}); }
this.connect('button-release-event', (actor, event) => {
if (!actor.visible || actor.get_paint_opacity() == 0) vfunc_button_release_event(buttonEvent) {
if (!this.visible || this.get_paint_opacity() == 0)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let urlId = this._findUrlAtPos(event); let urlId = this._findUrlAtPos(buttonEvent);
if (urlId != -1) { if (urlId != -1) {
let url = this._urls[urlId].url; let url = this._urls[urlId].url;
if (!url.includes(':')) if (!url.includes(':'))
url = 'http://' + url; url = 'http://' + url;
Gio.app_info_launch_default_for_uri(url, global.create_app_launch_context(0, -1)); Gio.app_info_launch_default_for_uri(
url, global.create_app_launch_context(0, -1));
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}); }
this.connect('motion-event', (actor, event) => {
if (!actor.visible || actor.get_paint_opacity() == 0) vfunc_motion_event(motionEvent) {
if (!this.visible || this.get_paint_opacity() == 0)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let urlId = this._findUrlAtPos(event); let urlId = this._findUrlAtPos(motionEvent);
if (urlId != -1 && !this._cursorChanged) { if (urlId != -1 && !this._cursorChanged) {
global.display.set_cursor(Meta.Cursor.POINTING_HAND); global.display.set_cursor(Meta.Cursor.POINTING_HAND);
this._cursorChanged = true; this._cursorChanged = true;
@ -96,8 +101,9 @@ class URLHighlighter extends St.Label {
this._cursorChanged = false; this._cursorChanged = false;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
}); }
this.connect('leave-event', () => {
vfunc_leave_event(crossingEvent) {
if (!this.visible || this.get_paint_opacity() == 0) if (!this.visible || this.get_paint_opacity() == 0)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@ -105,8 +111,7 @@ class URLHighlighter extends St.Label {
this._cursorChanged = false; this._cursorChanged = false;
global.display.set_cursor(Meta.Cursor.DEFAULT); global.display.set_cursor(Meta.Cursor.DEFAULT);
} }
return Clutter.EVENT_PROPAGATE; return super.vfunc_leave_event(crossingEvent);
});
} }
setMarkup(text, allowMarkup) { setMarkup(text, allowMarkup) {
@ -135,7 +140,7 @@ class URLHighlighter extends St.Label {
} }
_findUrlAtPos(event) { _findUrlAtPos(event) {
let [x, y] = event.get_coords(); let { x, y } = event;
[, x, y] = this.transform_stage_point(x, y); [, x, y] = this.transform_stage_point(x, y);
let findPos = -1; let findPos = -1;
for (let i = 0; i < this.clutter_text.text.length; i++) { for (let i = 0; i < this.clutter_text.text.length; i++) {
@ -309,8 +314,6 @@ var Message = GObject.registerClass({
this.expanded = false; this.expanded = false;
this._useBodyMarkup = false; this._useBodyMarkup = false;
this.connect('key-press-event', this._onKeyPressed.bind(this));
let vbox = new St.BoxLayout({ vertical: true }); let vbox = new St.BoxLayout({ vertical: true });
this.set_child(vbox); this.set_child(vbox);
@ -363,7 +366,6 @@ var Message = GObject.registerClass({
this._closeButton.connect('clicked', this.close.bind(this)); this._closeButton.connect('clicked', this.close.bind(this));
let actorHoverId = this.connect('notify::hover', this._sync.bind(this)); let actorHoverId = this.connect('notify::hover', this._sync.bind(this));
this._closeButton.connect('destroy', this.disconnect.bind(this, actorHoverId)); this._closeButton.connect('destroy', this.disconnect.bind(this, actorHoverId));
this.connect('clicked', this._onClicked.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this._sync(); this._sync();
} }
@ -508,14 +510,11 @@ var Message = GObject.registerClass({
this._closeButton.reactive = visible; this._closeButton.reactive = visible;
} }
_onClicked() {
}
_onDestroy() { _onDestroy() {
} }
_onKeyPressed(a, event) { vfunc_key_press_event(keyEvent) {
let keysym = event.get_key_symbol(); let keysym = keyEvent.keyval;
if (keysym == Clutter.KEY_Delete || if (keysym == Clutter.KEY_Delete ||
keysym == Clutter.KEY_KP_Delete) { keysym == Clutter.KEY_KP_Delete) {

View File

@ -49,7 +49,7 @@ class MediaMessage extends MessageList.Message {
this._update(); this._update();
} }
_onClicked() { vfunc_clicked() {
this._player.raise(); this._player.raise();
Main.panel.closeCalendar(); Main.panel.closeCalendar();
} }

View File

@ -44,8 +44,10 @@ var PadChooser = GObject.registerClass({
this._ensureMenu(groupDevices); this._ensureMenu(groupDevices);
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('clicked', actor => { }
if (actor.get_checked()) {
vfunc_clicked() {
if (this.get_checked()) {
if (this._padChooserMenu != null) if (this._padChooserMenu != null)
this._padChooserMenu.open(true); this._padChooserMenu.open(true);
else else
@ -53,7 +55,6 @@ var PadChooser = GObject.registerClass({
} else { } else {
this._padChooserMenu.close(true); this._padChooserMenu.close(true);
} }
});
} }
_ensureMenu(devices) { _ensureMenu(devices) {
@ -93,10 +94,9 @@ var KeybindingEntry = GObject.registerClass({
}, class KeybindingEntry extends St.Entry { }, class KeybindingEntry extends St.Entry {
_init() { _init() {
super._init({ hint_text: _("New shortcut…"), style: 'width: 10em' }); super._init({ hint_text: _("New shortcut…"), style: 'width: 10em' });
this.connect('captured-event', this._onCapturedEvent.bind(this));
} }
_onCapturedEvent(actor, event) { vfunc_captured_event(event) {
if (event.type() != Clutter.EventType.KEY_PRESS) if (event.type() != Clutter.EventType.KEY_PRESS)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@ -116,7 +116,6 @@ var ActionComboBox = GObject.registerClass({
}, class ActionComboBox extends St.Button { }, class ActionComboBox extends St.Button {
_init() { _init() {
super._init({ style_class: 'button' }); super._init({ style_class: 'button' });
this.connect('clicked', this._onButtonClicked.bind(this));
this.set_toggle_mode(true); this.set_toggle_mode(true);
let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL, let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL,
@ -182,7 +181,7 @@ var ActionComboBox = GObject.registerClass({
this._editMenu.close(true); this._editMenu.close(true);
} }
_onButtonClicked() { vfunc_clicked() {
if (this.get_checked()) if (this.get_checked())
this.popup(); this.popup();
else else

View File

@ -97,18 +97,26 @@ var AnimatedPageIndicators = GObject.registerClass(
class AnimatedPageIndicators extends PageIndicators { class AnimatedPageIndicators extends PageIndicators {
_init() { _init() {
super._init(); super._init();
this.connect('destroy', this._onDestroy.bind(this));
}
this.connect('notify::mapped', () => { _onDestroy() {
if (!this.mapped) if (this.animateLater) {
return; Meta.later_remove(this.animateLater);
this.animateLater = 0;
}
}
vfunc_map() {
super.vfunc_map();
// Implicit animations are skipped for unmapped actors, and our // Implicit animations are skipped for unmapped actors, and our
// children aren't mapped yet, so defer to a later handler // children aren't mapped yet, so defer to a later handler
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => { this.animateLater = Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
this.animateLater = 0;
this.animateIndicators(AnimationDirection.IN); this.animateIndicators(AnimationDirection.IN);
return GLib.SOURCE_REMOVE; return GLib.SOURCE_REMOVE;
}); });
});
} }
animateIndicators(animationDirection) { animateIndicators(animationDirection) {

View File

@ -430,9 +430,6 @@ class ActivitiesButton extends PanelMenu.Button {
this.label_actor = this._label; this.label_actor = this._label;
this.connect('captured-event', this._onCapturedEvent.bind(this));
this.connect_after('key-release-event', this._onKeyRelease.bind(this));
Main.overview.connect('showing', () => { Main.overview.connect('showing', () => {
this.add_style_pseudo_class('overview'); this.add_style_pseudo_class('overview');
this.add_accessible_state (Atk.StateType.CHECKED); this.add_accessible_state (Atk.StateType.CHECKED);
@ -459,7 +456,7 @@ class ActivitiesButton extends PanelMenu.Button {
return DND.DragMotionResult.CONTINUE; return DND.DragMotionResult.CONTINUE;
} }
_onCapturedEvent(actor, event) { vfunc_captured_event(event) {
if (event.type() == Clutter.EventType.BUTTON_PRESS || if (event.type() == Clutter.EventType.BUTTON_PRESS ||
event.type() == Clutter.EventType.TOUCH_BEGIN) { event.type() == Clutter.EventType.TOUCH_BEGIN) {
if (!Main.overview.shouldToggleByCornerOrButton()) if (!Main.overview.shouldToggleByCornerOrButton())
@ -468,9 +465,7 @@ class ActivitiesButton extends PanelMenu.Button {
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onEvent(actor, event) { vfunc_event(event) {
super._onEvent(actor, event);
if (event.type() == Clutter.EventType.TOUCH_END || if (event.type() == Clutter.EventType.TOUCH_END ||
event.type() == Clutter.EventType.BUTTON_RELEASE) event.type() == Clutter.EventType.BUTTON_RELEASE)
if (Main.overview.shouldToggleByCornerOrButton()) if (Main.overview.shouldToggleByCornerOrButton())
@ -479,13 +474,16 @@ class ActivitiesButton extends PanelMenu.Button {
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onKeyRelease(actor, event) { vfunc_key_release_event(keyEvent) {
let symbol = event.get_key_symbol(); let ret = super.vfunc_key_release_event(keyEvent);
if (ret == Clutter.EVENT_PROPAGATE) {
let symbol = keyEvent.keyval;
if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) { if (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_space) {
if (Main.overview.shouldToggleByCornerOrButton()) if (Main.overview.shouldToggleByCornerOrButton())
Main.overview.toggle(); Main.overview.toggle();
} }
return Clutter.EVENT_PROPAGATE; }
return ret;
} }
_xdndToggleOverview() { _xdndToggleOverview() {
@ -804,10 +802,6 @@ class Panel extends St.Widget {
this._rightCorner = new PanelCorner(St.Side.RIGHT); this._rightCorner = new PanelCorner(St.Side.RIGHT);
this.add_child(this._rightCorner); this.add_child(this._rightCorner);
this.connect('button-press-event', this._onButtonPress.bind(this));
this.connect('touch-event', this._onButtonPress.bind(this));
this.connect('key-press-event', this._onKeyPress.bind(this));
Main.overview.connect('showing', () => { Main.overview.connect('showing', () => {
this.add_style_pseudo_class('overview'); this.add_style_pseudo_class('overview');
}); });
@ -912,45 +906,48 @@ class Panel extends St.Widget {
this._rightCorner.allocate(childBox, flags); this._rightCorner.allocate(childBox, flags);
} }
_onButtonPress(actor, event) { _tryDragWindow(event) {
if (Main.modalCount > 0) if (Main.modalCount > 0)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
if (event.get_source() != actor) if (event.source != this)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let type = event.type(); let { x, y } = event;
let isPress = type == Clutter.EventType.BUTTON_PRESS; let dragWindow = this._getDraggableWindowForPosition(x);
if (!isPress && type != Clutter.EventType.TOUCH_BEGIN)
return Clutter.EVENT_PROPAGATE;
let button = isPress ? event.get_button() : -1;
if (isPress && button != 1)
return Clutter.EVENT_PROPAGATE;
let [stageX, stageY] = event.get_coords();
let dragWindow = this._getDraggableWindowForPosition(stageX);
if (!dragWindow) if (!dragWindow)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
global.display.begin_grab_op(dragWindow, return global.display.begin_grab_op(
dragWindow,
Meta.GrabOp.MOVING, Meta.GrabOp.MOVING,
false, /* pointer grab */ false, /* pointer grab */
true, /* frame action */ true, /* frame action */
button, event.button || -1,
event.get_state(), event.modifier_state,
event.get_time(), event.time,
stageX, stageY); x, y) ? Clutter.EVENT_STOP : Clutter.EVENT_PROPAGATE;
return Clutter.EVENT_STOP;
} }
_onKeyPress(actor, event) { vfunc_button_press_event(buttonEvent) {
let symbol = event.get_key_symbol(); if (buttonEvent.button != 1)
return Clutter.EVENT_PROPAGATE;
return this._tryDragWindow(buttonEvent);
}
vfunc_touch_event(touchEvent) {
if (touchEvent.type != Clutter.EventType.TOUCH_BEGIN)
return Clutter.EVENT_PROPAGATE;
return this._tryDragWindow(touchEvent);
}
vfunc_key_press_event(keyEvent) {
let symbol = keyEvent.keyval;
if (symbol == Clutter.KEY_Escape) { if (symbol == Clutter.KEY_Escape) {
global.display.focus_default_window(event.get_time()); global.display.focus_default_window(keyEvent.time);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }

View File

@ -100,9 +100,6 @@ var Button = GObject.registerClass({
accessible_name: nameText ? nameText : "", accessible_name: nameText ? nameText : "",
accessible_role: Atk.Role.MENU }); accessible_role: Atk.Role.MENU });
this.connect('event', this._onEvent.bind(this));
this.connect('notify::visible', this._onVisibilityChanged.bind(this));
if (dontCreateMenu) if (dontCreateMenu)
this.menu = new PopupMenu.PopupDummyMenu(this); this.menu = new PopupMenu.PopupDummyMenu(this);
else else
@ -131,7 +128,7 @@ var Button = GObject.registerClass({
this.emit('menu-set'); this.emit('menu-set');
} }
_onEvent(actor, event) { vfunc_event(event) {
if (this.menu && if (this.menu &&
(event.type() == Clutter.EventType.TOUCH_BEGIN || (event.type() == Clutter.EventType.TOUCH_BEGIN ||
event.type() == Clutter.EventType.BUTTON_PRESS)) event.type() == Clutter.EventType.BUTTON_PRESS))
@ -140,11 +137,10 @@ var Button = GObject.registerClass({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onVisibilityChanged() { vfunc_hide() {
if (!this.menu) super.vfunc_hide();
return;
if (!this.visible) if (this.menu)
this.menu.close(); this.menu.close();
} }

View File

@ -97,12 +97,6 @@ var PopupBaseMenuItem = GObject.registerClass({
if (params.style_class) if (params.style_class)
this.add_style_class_name(params.style_class); this.add_style_class_name(params.style_class);
if (this._activatable) {
this.connect('button-press-event', this._onButtonPressEvent.bind(this));
this.connect('button-release-event', this._onButtonReleaseEvent.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this));
this.connect('key-press-event', this._onKeyPressEvent.bind(this));
}
if (params.reactive && params.hover) if (params.reactive && params.hover)
this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE); this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE);
} }
@ -124,32 +118,44 @@ var PopupBaseMenuItem = GObject.registerClass({
this._parent = parent; this._parent = parent;
} }
_onButtonPressEvent() { vfunc_button_press_event(buttonEvent) {
if (!this._activatable)
return super.vfunc_button_press_event(buttonEvent);
// This is the CSS active state // This is the CSS active state
this.add_style_pseudo_class('active'); this.add_style_pseudo_class('active');
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onButtonReleaseEvent(actor, event) { vfunc_button_release_event(buttonEvent) {
if (!this._activatable)
return super.vfunc_button_release_event(buttonEvent);
this.remove_style_pseudo_class('active'); this.remove_style_pseudo_class('active');
this.activate(event); this.activate(Clutter.get_current_event());
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() == Clutter.EventType.TOUCH_END) { if (!this._activatable)
return super.vfunc_touch_event(touchEvent);
if (touchEvent.type == Clutter.EventType.TOUCH_END) {
this.remove_style_pseudo_class('active'); this.remove_style_pseudo_class('active');
this.activate(event); this.activate(Clutter.get_current_event());
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (event.type() == Clutter.EventType.TOUCH_BEGIN) { } else if (touchEvent.type == Clutter.EventType.TOUCH_BEGIN) {
// This is the CSS active state // This is the CSS active state
this.add_style_pseudo_class('active'); this.add_style_pseudo_class('active');
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onKeyPressEvent(actor, event) { vfunc_key_press_event(keyEvent) {
let state = event.get_state(); if (!this._activatable)
return super.vfunc_key_press_event(keyEvent);
let state = keyEvent.modifier_state;
// if user has a modifier down (except capslock and numlock) // if user has a modifier down (except capslock and numlock)
// then don't handle the key press here // then don't handle the key press here
@ -160,9 +166,9 @@ var PopupBaseMenuItem = GObject.registerClass({
if (state) if (state)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
let symbol = event.get_key_symbol(); let symbol = keyEvent.keyval;
if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) { if (symbol == Clutter.KEY_space || symbol == Clutter.KEY_Return) {
this.activate(event); this.activate(Clutter.get_current_event());
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
@ -1185,8 +1191,8 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return this.menu.isOpen; return this.menu.isOpen;
} }
_onKeyPressEvent(actor, event) { vfunc_key_press_event(keyPressEvent) {
let symbol = event.get_key_symbol(); let symbol = keyPressEvent.keyval;
if (symbol == Clutter.KEY_Right) { if (symbol == Clutter.KEY_Right) {
this._setOpenState(true); this._setOpenState(true);
@ -1197,14 +1203,14 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
return super._onKeyPressEvent(actor, event); return super.vfunc_key_press_event(keyPressEvent);
} }
activate(_event) { activate(_event) {
this._setOpenState(true); this._setOpenState(true);
} }
_onButtonReleaseEvent() { vfunc_button_release_event() {
// Since we override the parent, we need to manage what the parent does // Since we override the parent, we need to manage what the parent does
// with the active style class // with the active style class
this.remove_style_pseudo_class('active'); this.remove_style_pseudo_class('active');
@ -1212,8 +1218,8 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() == Clutter.EventType.TOUCH_END) { if (touchEvent.type == Clutter.EventType.TOUCH_END) {
// Since we override the parent, we need to manage what the parent does // Since we override the parent, we need to manage what the parent does
// with the active style class // with the active style class
this.remove_style_pseudo_class('active'); this.remove_style_pseudo_class('active');

View File

@ -239,13 +239,6 @@ var SelectArea = GObject.registerClass({
this._grabHelper = new GrabHelper.GrabHelper(this); this._grabHelper = new GrabHelper.GrabHelper(this);
this.connect('button-press-event',
this._onButtonPress.bind(this));
this.connect('button-release-event',
this._onButtonRelease.bind(this));
this.connect('motion-event',
this._onMotionEvent.bind(this));
let constraint = new Clutter.BindConstraint({ source: global.stage, let constraint = new Clutter.BindConstraint({ source: global.stage,
coordinate: Clutter.BindCoordinate.ALL }); coordinate: Clutter.BindCoordinate.ALL });
this.add_constraint(constraint); this.add_constraint(constraint);
@ -276,11 +269,11 @@ var SelectArea = GObject.registerClass({
}); });
} }
_onMotionEvent(actor, event) { vfunc_motion_event(motionEvent) {
if (this._startX == -1 || this._startY == -1 || this._result) if (this._startX == -1 || this._startY == -1 || this._result)
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
[this._lastX, this._lastY] = event.get_coords(); [this._lastX, this._lastY] = [motionEvent.x, motionEvent.y];
this._lastX = Math.floor(this._lastX); this._lastX = Math.floor(this._lastX);
this._lastY = Math.floor(this._lastY); this._lastY = Math.floor(this._lastY);
let geometry = this._getGeometry(); let geometry = this._getGeometry();
@ -292,8 +285,8 @@ var SelectArea = GObject.registerClass({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onButtonPress(actor, event) { vfunc_button_press_event(buttonEvent) {
[this._startX, this._startY] = event.get_coords(); [this._startX, this._startY] = [buttonEvent.x, buttonEvent.y];
this._startX = Math.floor(this._startX); this._startX = Math.floor(this._startX);
this._startY = Math.floor(this._startY); this._startY = Math.floor(this._startY);
this._rubberband.set_position(this._startX, this._startY); this._rubberband.set_position(this._startX, this._startY);
@ -301,7 +294,7 @@ var SelectArea = GObject.registerClass({
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
_onButtonRelease() { vfunc_button_release_event() {
this._result = this._getGeometry(); this._result = this._getGeometry();
this.ease({ this.ease({
opacity: 0, opacity: 0,
@ -336,8 +329,6 @@ var PickPixel = GObject.registerClass({
this._grabHelper = new GrabHelper.GrabHelper(this); this._grabHelper = new GrabHelper.GrabHelper(this);
this.connect('button-release-event', this._onButtonRelease.bind(this));
let constraint = new Clutter.BindConstraint({ source: global.stage, let constraint = new Clutter.BindConstraint({ source: global.stage,
coordinate: Clutter.BindCoordinate.ALL }); coordinate: Clutter.BindCoordinate.ALL });
this.add_constraint(constraint); this.add_constraint(constraint);
@ -353,8 +344,8 @@ var PickPixel = GObject.registerClass({
super.vfunc_show(); super.vfunc_show();
} }
_onButtonRelease(actor, event) { vfunc_button_release_event(buttonEvent) {
let [x, y] = event.get_coords(); let { x, y } = buttonEvent;
this._result = new Graphene.Point({ x, y }); this._result = new Graphene.Point({ x, y });
this._grabHelper.ungrab(); this._grabHelper.ungrab();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;

View File

@ -55,8 +55,10 @@ var SearchResult = GObject.registerClass({
x_align: St.Align.START, x_align: St.Align.START,
y_fill: true y_fill: true
}); });
}
this.connect('clicked', this.activate.bind(this)); vfunc_clicked() {
this.activate();
} }
activate() { activate() {

View File

@ -71,11 +71,9 @@ var ListItem = GObject.registerClass({
let labelBin = new St.Bin({ y_align: St.Align.MIDDLE, let labelBin = new St.Bin({ y_align: St.Align.MIDDLE,
child: this._nameLabel }); child: this._nameLabel });
layout.add(labelBin); layout.add(labelBin);
this.connect('clicked', this._onClicked.bind(this));
} }
_onClicked() { vfunc_clicked() {
this.emit('activate'); this.emit('activate');
this._app.activate(); this._app.activate();
} }

View File

@ -22,12 +22,7 @@ var Slider = GObject.registerClass({
accessible_role: Atk.Role.SLIDER accessible_role: Atk.Role.SLIDER
}); });
this.connect('button-press-event', this._startDragging.bind(this)); this._releaseId = 0;
this.connect('touch-event', this._touchDragging.bind(this));
this.connect('scroll-event', this._onScrollEvent.bind(this));
this.connect('key-press-event', this.onKeyPressEvent.bind(this));
this._releaseId = this._motionId = 0;
this._dragging = false; this._dragging = false;
this._customAccessible.connect('get-minimum-increment', this._getMinimumIncrement.bind(this)); this._customAccessible.connect('get-minimum-increment', this._getMinimumIncrement.bind(this));
@ -62,8 +57,8 @@ var Slider = GObject.registerClass({
cr.$dispose(); cr.$dispose();
} }
_startDragging(actor, event) { vfunc_button_press_event() {
return this.startDragging(event); return this.startDragging(Clutter.get_current_event());
} }
startDragging(event) { startDragging(event) {
@ -83,11 +78,6 @@ var Slider = GObject.registerClass({
this._grabbedDevice = device; this._grabbedDevice = device;
this._grabbedSequence = sequence; this._grabbedSequence = sequence;
if (sequence == null) {
this._releaseId = this.connect('button-release-event', this._endDragging.bind(this));
this._motionId = this.connect('motion-event', this._motionEvent.bind(this));
}
// We need to emit 'drag-begin' before moving the handle to make // We need to emit 'drag-begin' before moving the handle to make
// sure that no 'notify::value' signal is emitted before this one. // sure that no 'notify::value' signal is emitted before this one.
this.emit('drag-begin'); this.emit('drag-begin');
@ -105,11 +95,6 @@ var Slider = GObject.registerClass({
this._releaseId = 0; this._releaseId = 0;
} }
if (this._motionId) {
this.disconnect(this._motionId);
this._motionId = 0;
}
if (this._grabbedSequence != null) if (this._grabbedSequence != null)
this._grabbedDevice.sequence_ungrab(this._grabbedSequence); this._grabbedDevice.sequence_ungrab(this._grabbedSequence);
else else
@ -124,7 +109,15 @@ var Slider = GObject.registerClass({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_touchDragging(actor, event) { vfunc_button_release_event() {
if (this._dragging && !this._grabbedSequence)
return this._endDragging();
return Clutter.EVENT_PROPAGATE;
}
vfunc_touch_event() {
let event = Clutter.get_current_event();
let device = event.get_device(); let device = event.get_device();
let sequence = event.get_event_sequence(); let sequence = event.get_event_sequence();
@ -132,9 +125,9 @@ var Slider = GObject.registerClass({
event.type() == Clutter.EventType.TOUCH_BEGIN) { event.type() == Clutter.EventType.TOUCH_BEGIN) {
this.startDragging(event); this.startDragging(event);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} else if (device.sequence_get_grabbed_actor(sequence) == actor) { } else if (device.sequence_get_grabbed_actor(sequence) == this) {
if (event.type() == Clutter.EventType.TOUCH_UPDATE) if (event.type() == Clutter.EventType.TOUCH_UPDATE)
return this._motionEvent(actor, event); return this._motionEvent(this, event);
else if (event.type() == Clutter.EventType.TOUCH_END) else if (event.type() == Clutter.EventType.TOUCH_END)
return this._endDragging(); return this._endDragging();
} }
@ -165,8 +158,15 @@ var Slider = GObject.registerClass({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onScrollEvent(actor, event) { vfunc_scroll_event() {
return this.scroll(event); return this.scroll(Clutter.get_current_event());
}
vfunc_motion_event() {
if (this._dragging && !this._grabbedSequence)
return this._motionEvent(this, Clutter.get_current_event());
return Clutter.EVENT_PROPAGATE;
} }
_motionEvent(actor, event) { _motionEvent(actor, event) {
@ -176,8 +176,8 @@ var Slider = GObject.registerClass({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
onKeyPressEvent(actor, event) { vfunc_key_press_event(keyPressEvent) {
let key = event.get_key_symbol(); let key = keyPressEvent.keyval;
if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) { if (key == Clutter.KEY_Right || key == Clutter.KEY_Left) {
let delta = key == Clutter.KEY_Right ? 0.1 : -0.1; let delta = key == Clutter.KEY_Right ? 0.1 : -0.1;
this.emit('drag-begin'); this.emit('drag-begin');

View File

@ -47,7 +47,7 @@ var Indicator = GObject.registerClass({
return this._slider.startDragging(event); return this._slider.startDragging(event);
}); });
this._item.connect('key-press-event', (actor, event) => { this._item.connect('key-press-event', (actor, event) => {
return this._slider.onKeyPressEvent(actor, event); return this._slider.emit('key-press-event', event);
}); });
} }

View File

@ -630,7 +630,6 @@ var NMWirelessDialogItem = GObject.registerClass({
can_focus: true, can_focus: true,
reactive: true }); reactive: true });
this.connect('key-focus-in', () => this.emit('selected'));
let action = new Clutter.ClickAction(); let action = new Clutter.ClickAction();
action.connect('clicked', () => this.grab_key_focus()); action.connect('clicked', () => this.grab_key_focus());
this.add_action(action); this.add_action(action);
@ -659,6 +658,10 @@ var NMWirelessDialogItem = GObject.registerClass({
this._sync(); this._sync();
} }
vfunc_key_focus_in() {
this.emit('selected');
}
_sync() { _sync() {
this._signalIcon.icon_name = this._getSignalIcon(); this._signalIcon.icon_name = this._getSignalIcon();
} }

View File

@ -34,7 +34,16 @@ class AltSwitcher extends St.Bin {
this._clickAction.connect('long-press', this._onLongPress.bind(this)); this._clickAction.connect('long-press', this._onLongPress.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('notify::mapped', () => (this._flipped = false)); }
vfunc_map() {
super.vfunc_map();
this._flipped = false;
}
vfunc_unmap() {
super.vfunc_unmap();
this._flipped = false;
} }
_sync() { _sync() {

View File

@ -47,7 +47,7 @@ var StreamSlider = class {
return this._slider.startDragging(event); return this._slider.startDragging(event);
}); });
this.item.connect('key-press-event', (actor, event) => { this.item.connect('key-press-event', (actor, event) => {
return this._slider.onKeyPressEvent(actor, event); return this._slider.emit('key-press-event', event);
}); });
this._stream = null; this._stream = null;
@ -375,12 +375,10 @@ var Indicator = GObject.registerClass({
}); });
this.menu.addMenuItem(this._volumeMenu); this.menu.addMenuItem(this._volumeMenu);
this.connect('scroll-event', this._onScrollEvent.bind(this));
} }
_onScrollEvent(actor, event) { vfunc_scroll_event() {
let result = this._volumeMenu.scroll(event); let result = this._volumeMenu.scroll(Clutter.get_current_event());
if (result == Clutter.EVENT_PROPAGATE || this.menu.actor.mapped) if (result == Clutter.EVENT_PROPAGATE || this.menu.actor.mapped)
return result; return result;

View File

@ -105,12 +105,6 @@ var SwitcherPopup = GObject.registerClass({
this._haveModal = true; this._haveModal = true;
this._modifierMask = primaryModifier(mask); this._modifierMask = primaryModifier(mask);
this.connect('key-press-event', this._keyPressEvent.bind(this));
this.connect('key-release-event', this._keyReleaseEvent.bind(this));
this.connect('button-press-event', this._clickedOutside.bind(this));
this.connect('scroll-event', this._scrollEvent.bind(this));
this.add_actor(this._switcherList); this.add_actor(this._switcherList);
this._switcherList.connect('item-activated', this._itemActivated.bind(this)); this._switcherList.connect('item-activated', this._itemActivated.bind(this));
this._switcherList.connect('item-entered', this._itemEntered.bind(this)); this._switcherList.connect('item-entered', this._itemEntered.bind(this));
@ -166,9 +160,10 @@ var SwitcherPopup = GObject.registerClass({
throw new GObject.NotImplementedError(`_keyPressHandler in ${this.constructor.name}`); throw new GObject.NotImplementedError(`_keyPressHandler in ${this.constructor.name}`);
} }
_keyPressEvent(actor, event) { vfunc_key_press_event(keyEvent) {
let keysym = event.get_key_symbol(); let keysym = keyEvent.keyval;
let action = global.display.get_keybinding_action(event.get_key_code(), event.get_state()); let action = global.display.get_keybinding_action(
keyEvent.hardware_keycode, keyEvent.modifier_state);
this._disableHover(); this._disableHover();
@ -183,13 +178,13 @@ var SwitcherPopup = GObject.registerClass({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_keyReleaseEvent(actor, event) { vfunc_key_release_event(keyEvent) {
if (this._modifierMask) { if (this._modifierMask) {
let [x_, y_, mods] = global.get_pointer(); let [x_, y_, mods] = global.get_pointer();
let state = mods & this._modifierMask; let state = mods & this._modifierMask;
if (state == 0) if (state == 0)
this._finish(event.get_time()); this._finish(keyEvent.time);
} else { } else {
this._resetNoModsTimeout(); this._resetNoModsTimeout();
} }
@ -197,7 +192,8 @@ var SwitcherPopup = GObject.registerClass({
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_clickedOutside() { vfunc_button_press_event() {
/* We clicked outside */
this.fadeAndDestroy(); this.fadeAndDestroy();
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }
@ -209,8 +205,8 @@ var SwitcherPopup = GObject.registerClass({
this._select(this._next()); this._select(this._next());
} }
_scrollEvent(actor, event) { vfunc_scroll_event(scrollEvent) {
this._scrollHandler(event.get_scroll_direction()); this._scrollHandler(scrollEvent.scroll_direction);
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
} }

View File

@ -163,13 +163,6 @@ var WindowClone = GObject.registerClass({
clickAction.connect('long-press', this._onLongPress.bind(this)); clickAction.connect('long-press', this._onLongPress.bind(this));
this.add_action(clickAction); this.add_action(clickAction);
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this.connect('key-press-event', this._onKeyPress.bind(this));
this.connect('enter-event', () => this.emit('show-chrome'));
this.connect('key-focus-in', () => this.emit('show-chrome'));
this.connect('leave-event', () => this.emit('hide-chrome'));
this.connect('key-focus-out', () => this.emit('hide-chrome'));
this._draggable = DND.makeDraggable(this, this._draggable = DND.makeDraggable(this,
{ restoreOnSuccess: true, { restoreOnSuccess: true,
@ -369,8 +362,28 @@ var WindowClone = GObject.registerClass({
this.emit('selected', global.get_current_time()); this.emit('selected', global.get_current_time());
} }
_onKeyPress(actor, event) { vfunc_enter_event(crossingEvent) {
let symbol = event.get_key_symbol(); this.emit('show-chrome');
return super.vfunc_enter_event(crossingEvent);
}
vfunc_leave_event(crossingEvent) {
this.emit('hide-chrome');
return super.vfunc_leave_event(crossingEvent);
}
vfunc_key_focus_in() {
super.vfunc_key_focus_in();
this.emit('show-chrome');
}
vfunc_key_focus_out() {
super.vfunc_key_focus_out();
this.emit('hide-chrome');
}
vfunc_key_press_event(keyEvent) {
let symbol = keyEvent.keyval;
let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter); let isEnter = (symbol == Clutter.KEY_Return || symbol == Clutter.KEY_KP_Enter);
if (isEnter) { if (isEnter) {
this._activate(); this._activate();
@ -1168,11 +1181,11 @@ class Workspace extends St.Widget {
this._positionWindowsFlags = 0; this._positionWindowsFlags = 0;
this._positionWindowsId = 0; this._positionWindowsId = 0;
}
this.connect('notify::mapped', () => { vfunc_map() {
if (this.mapped) super.vfunc_map();
this._syncActualGeometry(); this._syncActualGeometry();
});
} }
vfunc_get_focus_chain() { vfunc_get_focus_chain() {

View File

@ -74,9 +74,6 @@ var WindowClone = GObject.registerClass({
}); });
this._onPositionChanged(); this._onPositionChanged();
this.connect('button-release-event', this._onButtonRelease.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this));
this.connect('destroy', this._onDestroy.bind(this)); this.connect('destroy', this._onDestroy.bind(this));
this._draggable = DND.makeDraggable(this, this._draggable = DND.makeDraggable(this,
@ -184,18 +181,22 @@ var WindowClone = GObject.registerClass({
} }
} }
_onButtonRelease(actor, event) { vfunc_button_press_event() {
this.emit('selected', event.get_time()); return Clutter.EVENT_STOP;
}
vfunc_button_release_event(buttonEvent) {
this.emit('selected', buttonEvent.time);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() != Clutter.EventType.TOUCH_END || if (touchEvent.type != Clutter.EventType.TOUCH_END ||
!global.display.is_pointer_emulating_sequence(event.get_event_sequence())) !global.display.is_pointer_emulating_sequence(touchEvent.sequence))
return Clutter.EVENT_PROPAGATE; return Clutter.EVENT_PROPAGATE;
this.emit('selected', event.get_time()); this.emit('selected', touchEvent.time);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
@ -667,10 +668,6 @@ var ThumbnailsBox = GObject.registerClass({
this._thumbnails = []; this._thumbnails = [];
this.connect('button-press-event', () => Clutter.EVENT_STOP);
this.connect('button-release-event', this._onButtonRelease.bind(this));
this.connect('touch-event', this._onTouchEvent.bind(this));
Main.overview.connect('showing', Main.overview.connect('showing',
this._createThumbnails.bind(this)); this._createThumbnails.bind(this));
Main.overview.connect('hidden', Main.overview.connect('hidden',
@ -727,17 +724,17 @@ var ThumbnailsBox = GObject.registerClass({
thumbnail.activate(time); thumbnail.activate(time);
} }
_onButtonRelease(actor, event) { vfunc_button_release_event(buttonEvent) {
let [stageX, stageY] = event.get_coords(); let { x, y } = buttonEvent;
this._activateThumbnailAtPoint(stageX, stageY, event.get_time()); this._activateThumbnailAtPoint(x, y, buttonEvent.time);
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;
} }
_onTouchEvent(actor, event) { vfunc_touch_event(touchEvent) {
if (event.type() == Clutter.EventType.TOUCH_END && if (touchEvent.type == Clutter.EventType.TOUCH_END &&
global.display.is_pointer_emulating_sequence(event.get_event_sequence())) { global.display.is_pointer_emulating_sequence(touchEvent.sequence)) {
let [stageX, stageY] = event.get_coords(); let { x, y } = touchEvent;
this._activateThumbnailAtPoint(stageX, stageY, event.get_time()); this._activateThumbnailAtPoint(x, y, touchEvent.time);
} }
return Clutter.EVENT_STOP; return Clutter.EVENT_STOP;

View File

@ -443,7 +443,6 @@ class WorkspacesDisplay extends St.Widget {
_init() { _init() {
super._init({ clip_to_allocation: true }); super._init({ clip_to_allocation: true });
this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this)); this.connect('notify::allocation', this._updateWorkspacesActualGeometry.bind(this));
this.connect('parent-set', this._parentSet.bind(this));
let clickAction = new Clutter.ClickAction(); let clickAction = new Clutter.ClickAction();
clickAction.connect('clicked', action => { clickAction.connect('clicked', action => {
@ -713,7 +712,7 @@ class WorkspacesDisplay extends St.Widget {
return this._getPrimaryView().getActiveWorkspace().hasMaximizedWindows(); return this._getPrimaryView().getActiveWorkspace().hasMaximizedWindows();
} }
_parentSet(actor, oldParent) { vfunc_parent_set(oldParent) {
if (oldParent && this._notifyOpacityId) if (oldParent && this._notifyOpacityId)
oldParent.disconnect(this._notifyOpacityId); oldParent.disconnect(this._notifyOpacityId);
this._notifyOpacityId = 0; this._notifyOpacityId = 0;