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('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.add(this._userWell, {
@ -145,6 +140,12 @@ var AuthPrompt = GObject.registerClass({
this._userVerifier = null;
}
vfunc_key_press_event(keyPressEvent) {
if (keyPressEvent.keyval == Clutter.KEY_Escape)
this.cancel();
return Clutter.EVENT_PROPAGATE;
}
_initButtons() {
this.cancelButton = new St.Button({ style_class: 'modal-dialog-button button',
button_mask: St.ButtonMask.ONE | St.ButtonMask.THREE,

View File

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

View File

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

View File

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

View File

@ -352,8 +352,6 @@ var Calendar = GObject.registerClass({
reactive: true
});
this.connect('scroll-event', this._onScroll.bind(this));
this._buildHeader ();
}
@ -446,8 +444,8 @@ var Calendar = GObject.registerClass({
this._firstDayIndex = this.get_n_children();
}
_onScroll(actor, event) {
switch (event.get_scroll_direction()) {
vfunc_scroll_event(scrollEvent) {
switch (scrollEvent.direction) {
case Clutter.ScrollDirection.UP:
case Clutter.ScrollDirection.LEFT:
this._onPrevMonthButtonClicked();
@ -668,11 +666,12 @@ class EventMessage extends MessageList.Message {
this._icon = new St.Icon({ icon_name: 'x-office-calendar-symbolic' });
this.setIcon(this._icon);
}
this.connect('style-changed', () => {
let iconVisible = this.get_parent().has_style_pseudo_class('first-child');
this._icon.opacity = (iconVisible ? 255 : 0);
});
vfunc_style_changed() {
let iconVisible = this.get_parent().has_style_pseudo_class('first-child');
this._icon.opacity = (iconVisible ? 255 : 0);
super.vfunc_style_changed();
}
_formatEventTime() {
@ -750,7 +749,7 @@ class NotificationMessage extends MessageList.Message {
this.setUseBodyMarkup(n.bannerBodyMarkup);
}
_onClicked() {
vfunc_clicked() {
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(
class NotificationSection extends MessageList.MessageListSection {
_init() {
@ -922,8 +938,6 @@ class NotificationSection extends MessageList.MessageListSection {
Main.messageTray.getSources().forEach(source => {
this._sourceAdded(Main.messageTray, source);
});
this.connect('notify::mapped', this._onMapped.bind(this));
}
get allowed() {
@ -931,17 +945,6 @@ class NotificationSection extends MessageList.MessageListSection {
!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) {
let obj = {
destroyId: 0,
@ -959,12 +962,12 @@ class NotificationSection extends MessageList.MessageListSection {
_onNotificationAdded(source, 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 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);
});
let destroyId = notification.connect('destroy', () => {
@ -995,14 +998,12 @@ class NotificationSection extends MessageList.MessageListSection {
this._sources.delete(source);
}
_onMapped() {
if (!this.mapped)
return;
vfunc_map() {
this._messages.forEach(message => {
if (message.notification.urgency != MessageTray.Urgency.CRITICAL)
message.notification.acknowledged = true;
});
super.vfunc_map();
}
_shouldShow() {

View File

@ -42,9 +42,6 @@ class TodayButton extends St.Button {
can_focus: true,
reactive: false
});
this.connect('clicked', () => {
this._calendar.setDate(new Date(), false);
});
let hbox = new St.BoxLayout({ vertical: true });
this.add_actor(hbox);
@ -64,6 +61,10 @@ class TodayButton extends St.Button {
});
}
vfunc_clicked() {
this._calendar.setDate(new Date(), false);
}
setDate(date) {
this._dayLabel.set_text(date.toLocaleFormat('%A'));
@ -97,14 +98,6 @@ class WorldClocksSection extends St.Button {
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 });
this._grid = new St.Widget({ style_class: 'world-clocks-grid',
layout_manager: layout });
@ -133,6 +126,14 @@ class WorldClocksSection extends St.Button {
this._sync();
}
vfunc_clicked() {
if (this._clocksApp)
this._clocksApp.activate();
Main.overview.hide();
Main.panel.closeCalendar();
}
_sync() {
this._clocksApp = this._appSystem.lookup_app('org.gnome.clocks.desktop');
this.visible = this._clocksApp != null;
@ -257,17 +258,6 @@ class WeatherSection extends St.Button {
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',
vertical: true });
@ -294,6 +284,18 @@ class WeatherSection extends St.Button {
this._sync();
}
vfunc_map() {
this._weatherClient.update();
super.vfunc_map();
}
vfunc_clicked() {
this._weatherClient.activateApp();
Main.overview.hide();
Main.panel.closeCalendar();
}
_getInfos() {
let info = this._weatherClient.info;
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._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;
}
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) {
if (this._orientation == orientation)
return;

View File

@ -231,18 +231,18 @@ var IconGrid = GObject.registerClass({
this._fixedHItemSize = this._fixedVItemSize = undefined;
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-removed', this._childRemoved.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() {
if (this._updateIconSizesLaterId) {
Meta.later_remove (this._updateIconSizesLaterId);

View File

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

View File

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

View File

@ -264,13 +264,12 @@ class ObjLink extends St.Button {
label: text
});
this.get_child().single_line_mode = true;
this.connect('clicked', this._onClicked.bind(this));
this._obj = o;
this._lookingGlass = lookingGlass;
}
_onClicked() {
vfunc_clicked() {
this._lookingGlass.inspectObject(this._obj, this);
}
});
@ -797,8 +796,6 @@ class LookingGlass extends St.BoxLayout {
// Sort of magic, but...eh.
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.connect('changed::monospace-font-name',
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
_globalKeyPressEvent(actor, event) {
let symbol = event.get_key_symbol();
let modifierState = event.get_state();
vfunc_key_press_event(keyPressEvent) {
let symbol = keyPressEvent.keyval;
if (symbol == Clutter.Escape) {
if (this._objInspector.visible) {
this._objInspector.close();
@ -1088,7 +1084,7 @@ class LookingGlass extends St.BoxLayout {
return Clutter.EVENT_STOP;
}
// 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) {
this._notebook.prevTab();
} else if (symbol == Clutter.KEY_Page_Down) {

View File

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

View File

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

View File

@ -44,16 +44,17 @@ var PadChooser = GObject.registerClass({
this._ensureMenu(groupDevices);
this.connect('destroy', this._onDestroy.bind(this));
this.connect('clicked', actor => {
if (actor.get_checked()) {
if (this._padChooserMenu != null)
this._padChooserMenu.open(true);
else
this.set_checked(false);
} else {
this._padChooserMenu.close(true);
}
});
}
vfunc_clicked() {
if (this.get_checked()) {
if (this._padChooserMenu != null)
this._padChooserMenu.open(true);
else
this.set_checked(false);
} else {
this._padChooserMenu.close(true);
}
}
_ensureMenu(devices) {
@ -93,10 +94,9 @@ var KeybindingEntry = GObject.registerClass({
}, class KeybindingEntry extends St.Entry {
_init() {
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)
return Clutter.EVENT_PROPAGATE;
@ -116,7 +116,6 @@ var ActionComboBox = GObject.registerClass({
}, class ActionComboBox extends St.Button {
_init() {
super._init({ style_class: 'button' });
this.connect('clicked', this._onButtonClicked.bind(this));
this.set_toggle_mode(true);
let boxLayout = new Clutter.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL,
@ -182,7 +181,7 @@ var ActionComboBox = GObject.registerClass({
this._editMenu.close(true);
}
_onButtonClicked() {
vfunc_clicked() {
if (this.get_checked())
this.popup();
else

View File

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

View File

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

View File

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

View File

@ -97,12 +97,6 @@ var PopupBaseMenuItem = GObject.registerClass({
if (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)
this.bind_property('hover', this, 'active', GObject.BindingFlags.SYNC_CREATE);
}
@ -124,32 +118,44 @@ var PopupBaseMenuItem = GObject.registerClass({
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.add_style_pseudo_class('active');
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.activate(event);
this.activate(Clutter.get_current_event());
return Clutter.EVENT_STOP;
}
_onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_END) {
vfunc_touch_event(touchEvent) {
if (!this._activatable)
return super.vfunc_touch_event(touchEvent);
if (touchEvent.type == Clutter.EventType.TOUCH_END) {
this.remove_style_pseudo_class('active');
this.activate(event);
this.activate(Clutter.get_current_event());
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.add_style_pseudo_class('active');
}
return Clutter.EVENT_PROPAGATE;
}
_onKeyPressEvent(actor, event) {
let state = event.get_state();
vfunc_key_press_event(keyEvent) {
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)
// then don't handle the key press here
@ -160,9 +166,9 @@ var PopupBaseMenuItem = GObject.registerClass({
if (state)
return Clutter.EVENT_PROPAGATE;
let symbol = event.get_key_symbol();
let symbol = keyEvent.keyval;
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_PROPAGATE;
@ -1185,8 +1191,8 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return this.menu.isOpen;
}
_onKeyPressEvent(actor, event) {
let symbol = event.get_key_symbol();
vfunc_key_press_event(keyPressEvent) {
let symbol = keyPressEvent.keyval;
if (symbol == Clutter.KEY_Right) {
this._setOpenState(true);
@ -1197,14 +1203,14 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return Clutter.EVENT_STOP;
}
return super._onKeyPressEvent(actor, event);
return super.vfunc_key_press_event(keyPressEvent);
}
activate(_event) {
this._setOpenState(true);
}
_onButtonReleaseEvent() {
vfunc_button_release_event() {
// Since we override the parent, we need to manage what the parent does
// with the active style class
this.remove_style_pseudo_class('active');
@ -1212,8 +1218,8 @@ class PopupSubMenuMenuItem extends PopupBaseMenuItem {
return Clutter.EVENT_PROPAGATE;
}
_onTouchEvent(actor, event) {
if (event.type() == Clutter.EventType.TOUCH_END) {
vfunc_touch_event(touchEvent) {
if (touchEvent.type == Clutter.EventType.TOUCH_END) {
// Since we override the parent, we need to manage what the parent does
// with the active style class
this.remove_style_pseudo_class('active');

View File

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

View File

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

View File

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

View File

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

View File

@ -47,7 +47,7 @@ var Indicator = GObject.registerClass({
return this._slider.startDragging(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,
reactive: true });
this.connect('key-focus-in', () => this.emit('selected'));
let action = new Clutter.ClickAction();
action.connect('clicked', () => this.grab_key_focus());
this.add_action(action);
@ -659,6 +658,10 @@ var NMWirelessDialogItem = GObject.registerClass({
this._sync();
}
vfunc_key_focus_in() {
this.emit('selected');
}
_sync() {
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.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() {

View File

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

View File

@ -105,12 +105,6 @@ var SwitcherPopup = GObject.registerClass({
this._haveModal = true;
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._switcherList.connect('item-activated', this._itemActivated.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}`);
}
_keyPressEvent(actor, event) {
let keysym = event.get_key_symbol();
let action = global.display.get_keybinding_action(event.get_key_code(), event.get_state());
vfunc_key_press_event(keyEvent) {
let keysym = keyEvent.keyval;
let action = global.display.get_keybinding_action(
keyEvent.hardware_keycode, keyEvent.modifier_state);
this._disableHover();
@ -183,13 +178,13 @@ var SwitcherPopup = GObject.registerClass({
return Clutter.EVENT_STOP;
}
_keyReleaseEvent(actor, event) {
vfunc_key_release_event(keyEvent) {
if (this._modifierMask) {
let [x_, y_, mods] = global.get_pointer();
let state = mods & this._modifierMask;
if (state == 0)
this._finish(event.get_time());
this._finish(keyEvent.time);
} else {
this._resetNoModsTimeout();
}
@ -197,7 +192,8 @@ var SwitcherPopup = GObject.registerClass({
return Clutter.EVENT_STOP;
}
_clickedOutside() {
vfunc_button_press_event() {
/* We clicked outside */
this.fadeAndDestroy();
return Clutter.EVENT_PROPAGATE;
}
@ -209,8 +205,8 @@ var SwitcherPopup = GObject.registerClass({
this._select(this._next());
}
_scrollEvent(actor, event) {
this._scrollHandler(event.get_scroll_direction());
vfunc_scroll_event(scrollEvent) {
this._scrollHandler(scrollEvent.scroll_direction);
return Clutter.EVENT_PROPAGATE;
}

View File

@ -163,13 +163,6 @@ var WindowClone = GObject.registerClass({
clickAction.connect('long-press', this._onLongPress.bind(this));
this.add_action(clickAction);
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,
{ restoreOnSuccess: true,
@ -369,8 +362,28 @@ var WindowClone = GObject.registerClass({
this.emit('selected', global.get_current_time());
}
_onKeyPress(actor, event) {
let symbol = event.get_key_symbol();
vfunc_enter_event(crossingEvent) {
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);
if (isEnter) {
this._activate();
@ -1168,11 +1181,11 @@ class Workspace extends St.Widget {
this._positionWindowsFlags = 0;
this._positionWindowsId = 0;
}
this.connect('notify::mapped', () => {
if (this.mapped)
this._syncActualGeometry();
});
vfunc_map() {
super.vfunc_map();
this._syncActualGeometry();
}
vfunc_get_focus_chain() {

View File

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

View File

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