Introducing settings
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					schemas/gschemas.compiled
 | 
				
			||||||
							
								
								
									
										93
									
								
								convenience.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								convenience.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,93 @@
 | 
				
			|||||||
 | 
					/* -*- mode: js; js-basic-offset: 4; indent-tabs-mode: nil -*- */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (c) 2011-2012, Giovanni Campagna <scampa.giovanni@gmail.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Redistribution and use in source and binary forms, with or without
 | 
				
			||||||
 | 
					  modification, are permitted provided that the following conditions are met:
 | 
				
			||||||
 | 
					    * Redistributions of source code must retain the above copyright
 | 
				
			||||||
 | 
					      notice, this list of conditions and the following disclaimer.
 | 
				
			||||||
 | 
					    * Redistributions in binary form must reproduce the above copyright
 | 
				
			||||||
 | 
					      notice, this list of conditions and the following disclaimer in the
 | 
				
			||||||
 | 
					      documentation and/or other materials provided with the distribution.
 | 
				
			||||||
 | 
					    * Neither the name of the GNOME nor the
 | 
				
			||||||
 | 
					      names of its contributors may be used to endorse or promote products
 | 
				
			||||||
 | 
					      derived from this software without specific prior written permission.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
				
			||||||
 | 
					  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
				
			||||||
 | 
					  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 | 
				
			||||||
 | 
					  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
 | 
				
			||||||
 | 
					  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 | 
				
			||||||
 | 
					  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 | 
				
			||||||
 | 
					  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 | 
				
			||||||
 | 
					  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | 
				
			||||||
 | 
					  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | 
				
			||||||
 | 
					  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Gettext = imports.gettext;
 | 
				
			||||||
 | 
					const Gio = imports.gi.Gio;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const Config = imports.misc.config;
 | 
				
			||||||
 | 
					const ExtensionUtils = imports.misc.extensionUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * initTranslations:
 | 
				
			||||||
 | 
					 * @domain: (optional): the gettext domain to use
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Initialize Gettext to load translations from extensionsdir/locale.
 | 
				
			||||||
 | 
					 * If @domain is not provided, it will be taken from metadata['gettext-domain']
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function initTranslations(domain) {
 | 
				
			||||||
 | 
					    let extension = ExtensionUtils.getCurrentExtension();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    domain = domain || extension.metadata['gettext-domain'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check if this extension was built with "make zip-file", and thus
 | 
				
			||||||
 | 
					    // has the locale files in a subfolder
 | 
				
			||||||
 | 
					    // otherwise assume that extension has been installed in the
 | 
				
			||||||
 | 
					    // same prefix as gnome-shell
 | 
				
			||||||
 | 
					    let localeDir = extension.dir.get_child('locale');
 | 
				
			||||||
 | 
					    if (localeDir.query_exists(null))
 | 
				
			||||||
 | 
					        Gettext.bindtextdomain(domain, localeDir.get_path());
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        Gettext.bindtextdomain(domain, Config.LOCALEDIR);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * getSettings:
 | 
				
			||||||
 | 
					 * @schema: (optional): the GSettings schema id
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Builds and return a GSettings schema for @schema, using schema files
 | 
				
			||||||
 | 
					 * in extensionsdir/schemas. If @schema is not provided, it is taken from
 | 
				
			||||||
 | 
					 * metadata['settings-schema'].
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getSettings(schema) {
 | 
				
			||||||
 | 
					    let extension = ExtensionUtils.getCurrentExtension();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    schema = schema || extension.metadata['settings-schema'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const GioSSS = Gio.SettingsSchemaSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // check if this extension was built with "make zip-file", and thus
 | 
				
			||||||
 | 
					    // has the schema files in a subfolder
 | 
				
			||||||
 | 
					    // otherwise assume that extension has been installed in the
 | 
				
			||||||
 | 
					    // same prefix as gnome-shell (and therefore schemas are available
 | 
				
			||||||
 | 
					    // in the standard folders)
 | 
				
			||||||
 | 
					    let schemaDir = extension.dir.get_child('schemas');
 | 
				
			||||||
 | 
					    let schemaSource;
 | 
				
			||||||
 | 
					    if (schemaDir.query_exists(null))
 | 
				
			||||||
 | 
					        schemaSource = GioSSS.new_from_directory(schemaDir.get_path(),
 | 
				
			||||||
 | 
					                                                 GioSSS.get_default(),
 | 
				
			||||||
 | 
					                                                 false);
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        schemaSource = GioSSS.get_default();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let schemaObj = schemaSource.lookup(schema, true);
 | 
				
			||||||
 | 
					    if (!schemaObj)
 | 
				
			||||||
 | 
					        throw new Error('Schema ' + schema + ' could not be found for extension '
 | 
				
			||||||
 | 
					                        + extension.metadata.uuid + '. Please check your installation.');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return new Gio.Settings({ settings_schema: schemaObj });
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,6 +17,8 @@ PlanetsExtension.prototype = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        this.extensionMeta = extensionMeta;
 | 
					        this.extensionMeta = extensionMeta;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        this._settings = Convenience.getSettings();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.panelContainer = new St.BoxLayout({style_class: "panel-box"});
 | 
					        this.panelContainer = new St.BoxLayout({style_class: "panel-box"});
 | 
				
			||||||
        this.actor.add_actor(this.panelContainer);
 | 
					        this.actor.add_actor(this.panelContainer);
 | 
				
			||||||
        this.actor.add_style_class_name('panel-status-button');
 | 
					        this.actor.add_style_class_name('panel-status-button');
 | 
				
			||||||
@@ -29,7 +31,8 @@ PlanetsExtension.prototype = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        this.last_update = 0;
 | 
					        this.last_update = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        MainLoop.timeout_add(1, Lang.bind(this, function() {
 | 
					        MainLoop.timeout_add(this._settings.get_int("refresh-interval"),
 | 
				
			||||||
 | 
					                            Lang.bind(this, function() {
 | 
				
			||||||
            this.last_update++;
 | 
					            this.last_update++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.panelLabel.set_text("Update count: " + this.last_update);
 | 
					            this.panelLabel.set_text("Update count: " + this.last_update);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,5 +4,6 @@
 | 
				
			|||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "uuid": "planets@gergely.polonkai.eu",
 | 
					    "uuid": "planets@gergely.polonkai.eu",
 | 
				
			||||||
    "name": "Planets",
 | 
					    "name": "Planets",
 | 
				
			||||||
    "description": "Display planets position"
 | 
					    "description": "Display planets position",
 | 
				
			||||||
 | 
					    "settings-schema": "planets"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								schemas/org.gnome.shell.extensions.planets.gschema.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								schemas/org.gnome.shell.extensions.planets.gschema.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<schemalist>
 | 
				
			||||||
 | 
					    <schema id="org.gnome.shell.extensions.planets" path="/org/gnome/shell/extensions/planets/">
 | 
				
			||||||
 | 
					        <key name="refresh-interval" type="i">
 | 
				
			||||||
 | 
					            <default>30</default>
 | 
				
			||||||
 | 
					            <summary>Refresh interval of planet data</summary>
 | 
				
			||||||
 | 
					            <description>Interval in seconds. Sets how often the planet positions are recalculated. Setting this too low (e.g. below 30) may raise performance issues.</description>
 | 
				
			||||||
 | 
					        </key>
 | 
				
			||||||
 | 
					    </schema>
 | 
				
			||||||
 | 
					</schemalist>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user