aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile5
-rw-r--r--README11
-rw-r--r--extension.js87
-rw-r--r--metadata.json8
-rw-r--r--stylesheet.css1
5 files changed, 112 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..fa7802b
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,5 @@
+all:
+ zip -j LockRotation@sigxcpu.org.zip *.js *.css metadata.json
+
+clean:
+ rm -f *.zip
diff --git a/README b/README
new file mode 100644
index 0000000..9101bfd
--- /dev/null
+++ b/README
@@ -0,0 +1,11 @@
+This is a quick hack to disable rotation on devices that support it
+
+Installation:
+
+Check out the extension:
+
+ git clone git://honk.sigxcpu.org/git/gnome-shell-lock-rotation.git ~/.local/share/gnome-shell/extensions/LockRotation@sigxcpu.org
+
+Activate it:
+
+ gsettings set org.gnome.shell enabled-extensions "['LockRotation@sigxcpu.org']
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();
+}
diff --git a/metadata.json b/metadata.json
new file mode 100644
index 0000000..e72d2a9
--- /dev/null
+++ b/metadata.json
@@ -0,0 +1,8 @@
+{
+ "extension-id": "net.godiug.lockrotation",
+ "uuid": "LockRotation@sigxcpu.org",
+ "name": "Lock Rotation Switch",
+ "description": "Allow to lock rotation from the user menu",
+ "shell-version": [ "3.6.1" ],
+ "url": "git://git.gnome.org/git/gnome-shell-lock-rotation-extension.git"
+}
diff --git a/stylesheet.css b/stylesheet.css
new file mode 100644
index 0000000..fbe5640
--- /dev/null
+++ b/stylesheet.css
@@ -0,0 +1 @@
+/* This extensions requires no custom styling */