aboutsummaryrefslogtreecommitdiff
path: root/extension.js
diff options
context:
space:
mode:
Diffstat (limited to 'extension.js')
-rw-r--r--extension.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/extension.js b/extension.js
new file mode 100644
index 0000000..6b3fc29
--- /dev/null
+++ b/extension.js
@@ -0,0 +1,87 @@
+// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
+
+const Gio = imports.gi.Gio;
+const Lang = imports.lang;
+const St = imports.gi.St;
+const PopupMenu = imports.ui.popupMenu;
+const Main = imports.ui.main;
+
+const ORIENTATION_SCHEMA = 'org.gnome.settings-daemon.peripherals.touchscreen'
+const ORIENTATION_LOCK_KEY = 'orientation-lock'
+const ORIENTATION_BUS_NAME = 'org.gnome.SettingsDaemon'
+const ORIENTATION_OBJECT_PATH = '/org/gnome/SettingsDaemon'
+
+const pingIface = <interface name='org.freedesktop.DBus.Introspectable'>
+<method name='Introspect'>
+ <arg type='s' direction='out'/>
+</method>
+</interface>;
+const Proxy = Gio.DBusProxy.makeProxyWrapper(pingIface);
+
+function LockRotation() {
+ this._init();
+}
+
+LockRotation.prototype = {
+ _init: function() {
+ let state;
+ let item = new PopupMenu.PopupSwitchMenuItem(_("Lock Rotation"));
+
+ item.connect('toggled', Lang.bind(this, this._rotationLockSwitched));
+ this._rotationLockSwitch = item;
+
+ this._settings = new Gio.Settings({ schema: ORIENTATION_SCHEMA });
+ this._settingsID =
+ this._settings.connect('changed::' + ORIENTATION_LOCK_KEY,
+ Lang.bind(this, this._updateRotationLock));
+ this._updateRotationLock();
+ },
+
+ _rotationLockSwitched: function (item, event) {
+ if (this._settings.is_writable(ORIENTATION_LOCK_KEY)) {
+ this._settings.set_boolean(ORIENTATION_LOCK_KEY, item.state);
+ }
+ },
+
+ _updateRotationLock: function () {
+ let state = this._settings.get_boolean(ORIENTATION_LOCK_KEY);
+ this._rotationLockSwitch.setToggleState(state)
+ },
+
+ /* check whether we have the orientation object on the bus */
+ _has_orientation: function () {
+ },
+
+ enable: function() {
+ let proxy = new Proxy(Gio.DBus.session,
+ ORIENTATION_BUS_NAME,
+ ORIENTATION_OBJECT_PATH);
+
+ proxy.IntrospectRemote(Lang.bind(this, function([result], err) {
+ if (result.indexOf("Orientation") != -1) {
+ let userMenu = Main.panel.statusArea.userMenu.menu;
+ userMenu.addMenuItem(this._rotationLockSwitch, 4);
+ }
+ }));
+ },
+
+ disable: function() {
+ this._settings.disconnect(this._settingsID);
+ this._rotationLockSwitch.destroy();
+ },
+};
+
+let _lockrotation;
+
+function init() {
+ /* do nothing */
+}
+
+function enable() {
+ _lockrotation = new LockRotation();
+ _lockrotation.enable();
+}
+
+function disable() {
+ _lockrotation.disable();
+}