diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js index 88e34cc6e..40150740a 100644 --- a/js/ui/appDisplay.js +++ b/js/ui/appDisplay.js @@ -1489,10 +1489,6 @@ var FolderIcon = GObject.registerClass({ this._itemDragEndId = Main.overview.connect( 'item-drag-end', this._onDragEnd.bind(this)); - this._popupTimeoutId = 0; - - this.connect('popup-menu', this._popupRenamePopup.bind(this)); - this.connect('destroy', this._onDestroy.bind(this)); this._folder.connect('changed', this._redisplay.bind(this)); @@ -1512,8 +1508,6 @@ var FolderIcon = GObject.registerClass({ if (this._dialog) this._dialog.destroy(); - - this._removeMenuTimeout(); } vfunc_clicked() { @@ -1528,7 +1522,6 @@ var FolderIcon = GObject.registerClass({ } open() { - this._removeMenuTimeout(); this._ensureFolderDialog(); this.view._scrollView.vscroll.adjustment.value = 0; this._dialog.popup(); @@ -1637,181 +1630,8 @@ var FolderIcon = GObject.registerClass({ }); } } - - _removeMenuTimeout() { - if (this._popupTimeoutId > 0) { - GLib.source_remove(this._popupTimeoutId); - this._popupTimeoutId = 0; - } - } - - _setPopupTimeout() { - this._removeMenuTimeout(); - this._popupTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, MENU_POPUP_TIMEOUT, () => { - this._popupTimeoutId = 0; - this._popupRenamePopup(); - return GLib.SOURCE_REMOVE; - }); - GLib.Source.set_name_by_id(this._popupTimeoutId, - '[gnome-shell] this._popupRenamePopup'); - } - - vfunc_leave_event(crossingEvent) { - let ret = super.vfunc_leave_event(crossingEvent); - this.fake_release(); - this._removeMenuTimeout(); - return ret; - } - - vfunc_button_press_event(buttonEvent) { - super.vfunc_button_press_event(buttonEvent); - - if (buttonEvent.button == 1) { - this._setPopupTimeout(); - } else if (buttonEvent.button == 3) { - this._popupRenamePopup(); - return Clutter.EVENT_STOP; - } - return Clutter.EVENT_PROPAGATE; - } - - vfunc_touch_event(touchEvent) { - super.vfunc_touch_event(touchEvent); - - if (touchEvent.type == Clutter.EventType.TOUCH_BEGIN) - this._setPopupTimeout(); - - return Clutter.EVENT_PROPAGATE; - } - - _popupRenamePopup() { - this._removeMenuTimeout(); - this.fake_release(); - - if (!this._menu) { - this._menuManager = new PopupMenu.PopupMenuManager(this); - - this._menu = new RenameFolderMenu(this, this._folder); - this._menuManager.addMenu(this._menu); - - this._menu.connect('open-state-changed', (menu, isPoppedUp) => { - if (!isPoppedUp) - this.sync_hover(); - }); - let id = Main.overview.connect('hiding', () => { - this._menu.close(); - }); - this.connect('destroy', () => { - Main.overview.disconnect(id); - }); - } - - this.set_hover(true); - this._menu.open(); - this._menuManager.ignoreRelease(); - } }); -var RenameFolderMenuItem = GObject.registerClass( -class RenameFolderMenuItem extends PopupMenu.PopupBaseMenuItem { - _init(folder) { - super._init({ - style_class: 'rename-folder-popup-item', - reactive: false, - }); - this.setOrnament(PopupMenu.Ornament.HIDDEN); - - this._folder = folder; - - // Entry - this._entry = new St.Entry({ - x_expand: true, - width: 200, - }); - this.add_child(this._entry); - - this._entry.clutter_text.connect( - 'notify::text', this._validate.bind(this)); - this._entry.clutter_text.connect( - 'activate', this._updateFolderName.bind(this)); - - // Rename button - this._button = new St.Button({ - style_class: 'button', - reactive: true, - button_mask: St.ButtonMask.ONE | St.ButtonMask.TWO, - can_focus: true, - label: _('Rename'), - }); - this.add_child(this._button); - - this._button.connect('clicked', this._updateFolderName.bind(this)); - } - - vfunc_map() { - this._entry.text = _getFolderName(this._folder); - this._entry.clutter_text.set_selection(0, -1); - super.vfunc_map(); - } - - vfunc_key_focus_in() { - super.vfunc_key_focus_in(); - this._entry.clutter_text.grab_key_focus(); - } - - _isValidFolderName() { - let folderName = _getFolderName(this._folder); - let newFolderName = this._entry.text.trim(); - - return newFolderName.length > 0 && newFolderName != folderName; - } - - _validate() { - let isValid = this._isValidFolderName(); - - this._button.reactive = isValid; - } - - _updateFolderName() { - if (!this._isValidFolderName()) - return; - - let newFolderName = this._entry.text.trim(); - this._folder.set_string('name', newFolderName); - this._folder.set_boolean('translate', false); - this.activate(Clutter.get_current_event()); - } -}); - -var RenameFolderMenu = class RenameFolderMenu extends PopupMenu.PopupMenu { - constructor(source, folder) { - super(source, 0.5, St.Side.BOTTOM); - this.actor.add_style_class_name('rename-folder-popup'); - - // We want to keep the item hovered while the menu is up - this.blockSourceEvents = true; - - let menuItem = new RenameFolderMenuItem(folder); - this.addMenuItem(menuItem); - - // Focus the text entry on menu pop-up - this.focusActor = menuItem; - - // Chain our visibility and lifecycle to that of the source - this._sourceMappedId = source.connect('notify::mapped', () => { - if (!source.mapped) - this.close(); - }); - source.connect('destroy', () => { - source.disconnect(this._sourceMappedId); - this.destroy(); - }); - - Main.uiGroup.add_actor(this.actor); - } -}; -Signals.addSignalMethods(RenameFolderMenu.prototype); - var AppFolderDialog = GObject.registerClass({ Signals: { 'open-state-changed': { param_types: [GObject.TYPE_BOOLEAN] },