diff --git a/extension.js b/extension.js index 37246fb..b3a4686 100644 --- a/extension.js +++ b/extension.js @@ -29,16 +29,43 @@ const Gio = imports.gi.Gio; const Lang = imports.lang; const Shell = imports.gi.Shell; const WindowManager = imports.ui.windowManager; +const ExtensionUtils = imports.misc.extensionUtils; +const ExtensionSystem = imports.ui.extensionSystem; +const Mainloop = imports.mainloop; + +const UBUNTU_DOCK_UUID = 'ubuntu-dock@ubuntu.com'; let panel; let overview; let settings; let oldDash; +let extensionChangedHandler; function init() { } function enable() { + // Disable Ubuntu Dock + if (ExtensionUtils.extensions[UBUNTU_DOCK_UUID] && ExtensionUtils.extensions[UBUNTU_DOCK_UUID].state == ExtensionSystem.ExtensionState.ENABLED) { + Mainloop.timeout_add(0, () => { + ExtensionSystem.disableExtension(UBUNTU_DOCK_UUID); + return GLib.SOURCE_REMOVE; + }); + } + // The Ubuntu Dock extension might get enabled after this extension + extensionChangedHandler = ExtensionSystem.connect('extension-state-changed', (evt, extension) => { + if (extension.uuid == UBUNTU_DOCK_UUID) { + Mainloop.timeout_add(0, () => { + if(extension.state == ExtensionSystem.ExtensionState.ENABLED) + ExtensionSystem.disableExtension(UBUNTU_DOCK_UUID); + else if(extension.state == ExtensionSystem.ExtensionState.DISABLED) + Main.overview._controls.dash.actor.hide(); // ubuntu dock shows this when disabled, hide it again + + return GLib.SOURCE_REMOVE; + }); + } + }); + settings = Convenience.getSettings('org.gnome.shell.extensions.dash-to-panel'); panel = new Panel.dtpPanel(settings); panel.enable(); @@ -83,4 +110,13 @@ function disable() { Shell.ActionMode.NORMAL | Shell.ActionMode.POPUP, Lang.bind(Main.wm, Main.wm._toggleAppMenu)); + + + // Re-enable Ubuntu Dock if it exists + ExtensionSystem.disconnect(extensionChangedHandler); + if (ExtensionUtils.extensions[UBUNTU_DOCK_UUID] && Main.sessionMode.allowExtensions) { + Mainloop.timeout_add(0, () => { + ExtensionSystem.enableExtension(UBUNTU_DOCK_UUID); + }); + } }