|
|
(7 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
| GSettings - on kõrgetasemeline rakendusliides, rakenduste jaoks.
| | ==Sissejuhatus== |
|
| |
|
| =Ülevaade=
| | Gsettings classi abil saame muuta aplikatsioonide seadeid. Seadete lugemine Gsettinguga on väga kiire, nagu ka kirjutamine. |
| <pre>
| | Kui teha Gsettingu instants, tuleb kõigepealt täpsustada schema mis kirjeldab seadete võtmeid, nende tüüpe, vaikimisiväärtusi ja muud infot. |
| GSettings;
| | Tavaliselt schema, mis on loetelu saadaval olevatest seadetest aplikatsioonile, omab fikseeritud teed(asukohta) mis ütleb kus globaalsel tasemel seadeid hoitakse. |
| | | Schemad saavad olla ka ümber paigutatud, ehk mitte kindla asukohaga. |
| GSettings * g_settings_new (const gchar *schema);
| | Võtme nimed on piiratud väikeste tähtedena, numbrite ja '-'-ga. Nimed peavad algama väikese tähega, ei või sisaldada numbreid ja ei tohi lõppeda '-'ga |
| GSettings * g_settings_new_with_path (const gchar *schema,
| |
| const gchar *path);
| |
| GSettings * g_settings_new_with_backend (const gchar *schema,
| |
| GSettingsBackend *backend);
| |
| GSettings * g_settings_new_with_backend_and_path
| |
| (const gchar *schema,
| |
| GSettingsBackend *backend,
| |
| const gchar *path);
| |
| void g_settings_sync (void);
| |
| GVariant * g_settings_get_value (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_value (GSettings *settings,
| |
| const gchar *key,
| |
| GVariant *value);
| |
| gboolean g_settings_is_writable (GSettings *settings,
| |
| const gchar *name);
| |
| void g_settings_delay (GSettings *settings);
| |
| void g_settings_apply (GSettings *settings);
| |
| void g_settings_revert (GSettings *settings);
| |
| gboolean g_settings_get_has_unapplied (GSettings *settings);
| |
| GSettings * g_settings_get_child (GSettings *settings,
| |
| const gchar *name);
| |
| void g_settings_reset (GSettings *settings,
| |
| const gchar *key);
| |
| | |
| const gchar * const * g_settings_list_schemas (void);
| |
| const gchar * const * g_settings_list_relocatable_schemas
| |
| (void);
| |
| gchar ** g_settings_list_keys (GSettings *settings);
| |
| gchar ** g_settings_list_children (GSettings *settings);
| |
| GVariant * g_settings_get_range (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_range_check (GSettings *settings,
| |
| const gchar *key,
| |
| GVariant *value);
| |
| | |
| void g_settings_get (GSettings *settings,
| |
| const gchar *key,
| |
| const gchar *format,
| |
| ...);
| |
| gboolean g_settings_set (GSettings *settings,
| |
| const gchar *key,
| |
| const gchar *format,
| |
| ...);
| |
| gboolean g_settings_get_boolean (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_boolean (GSettings *settings,
| |
| const gchar *key,
| |
| gboolean value);
| |
| gint g_settings_get_int (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_int (GSettings *settings,
| |
| const gchar *key,
| |
| gint value);
| |
| guint g_settings_get_uint (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_uint (GSettings *settings,
| |
| const gchar *key,
| |
| guint value);
| |
| gdouble g_settings_get_double (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_double (GSettings *settings,
| |
| const gchar *key,
| |
| gdouble value);
| |
| gchar * g_settings_get_string (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_string (GSettings *settings,
| |
| const gchar *key,
| |
| const gchar *value);
| |
| gchar ** g_settings_get_strv (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_strv (GSettings *settings,
| |
| const gchar *key,
| |
| const gchar *const *value);
| |
| gint g_settings_get_enum (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_enum (GSettings *settings,
| |
| const gchar *key,
| |
| gint value);
| |
| guint g_settings_get_flags (GSettings *settings,
| |
| const gchar *key);
| |
| gboolean g_settings_set_flags (GSettings *settings,
| |
| const gchar *key,
| |
| guint value);
| |
| | |
| gboolean (*GSettingsGetMapping) (GVariant *value,
| |
| gpointer *result,
| |
| gpointer user_data);
| |
| gpointer g_settings_get_mapped (GSettings *settings,
| |
| const gchar *key,
| |
| GSettingsGetMapping mapping,
| |
| gpointer user_data);
| |
| | |
| enum GSettingsBindFlags;
| |
| void g_settings_bind (GSettings *settings,
| |
| const gchar *key,
| |
| gpointer object,
| |
| const gchar *property,
| |
| GSettingsBindFlags flags);
| |
| void g_settings_bind_with_mapping (GSettings *settings,
| |
| const gchar *key,
| |
| gpointer object,
| |
| const gchar *property,
| |
| GSettingsBindFlags flags,
| |
| GSettingsBindGetMapping get_mapping,
| |
| GSettingsBindSetMapping set_mapping,
| |
| gpointer user_data,
| |
| GDestroyNotify destroy);
| |
| void g_settings_bind_writable (GSettings *settings,
| |
| const gchar *key,
| |
| gpointer object,
| |
| const gchar *property,
| |
| gboolean inverted);
| |
| void g_settings_unbind (gpointer object,
| |
| const gchar *property);
| |
| GVariant * (*GSettingsBindSetMapping) (const GValue *value,
| |
| const GVariantType *expected_type,
| |
| gpointer user_data);
| |
| gboolean (*GSettingsBindGetMapping) (GValue *value,
| |
| GVariant *variant,
| |
| gpointer user_data);
| |
| </pre>
| |
| | |
| ==Objekti hierarhia==
| |
| <pre>
| |
| GObject
| |
| +----GSettings
| |
| </pre>
| |
| ==Omadused==
| |
| <pre>
| |
| "backend" GSettingsBackend* : Read / Write / Construct Only
| |
| "delay-apply" gboolean : Read
| |
| "has-unapplied" gboolean : Read
| |
| "path" gchar* : Read / Write / Construct Only
| |
| "schema" gchar* : Read / Write / Construct Only
| |
| </pre>
| |
| ==Signaalid==
| |
| <pre>
| |
| "change-event" : Run Last
| |
| "changed" : Has Details
| |
| "writable-change-event" : Run Last
| |
| "writable-changed" : Has Details
| |
| </pre>
| |
| | |
| ==Kirjeldus==
| |
| | |
| GSettings on rakendusliides, mis võimaldab mugavalt salvestada ja väljavõtta rakendus seadeid.
| |
| | |
| Loeb ja kirjutab, ning võib pidada mitte-blokeeruvaks. Lugemine '''GSettings-us''' on väga kiire: on ligikaudu samas suurusjärgus (kuid aeglasem) kui '''GHashTable''' otsing. Kirjutamine on ka väga kiire juhtudel kui on vaja tagasi tuua eelnevalt salvestatud rakendusi, kuid võib olla ka väga kallis. Paljud taustaprogrammid (sh dconf) on laisk lähtestamine, mis tähendab, et kui kasutaja kasutab oma arvuti muutmata mingeid seadeid siis palju tööd saab vältida. Sest dconf, D-Busi teenust ei pea isegi alustama sel juhul. Sel põhjusel, peaks ainult GSettings ära muutma võtmed väljundi, mis selgitab kasutaja tegevust. Erilist tähelepanu tuleb pöörata, muudatustele, mis tehtud käivitamise ajal - näiteks algväärtuste määramisel. Sisseehitatud '''g_settings_bind ()''' funktsiooni puhul peab olema ettevaatlik, et ta ei kirjutaks seadet, mis vastab signaalidele mis edasi teevad muudatusi, ja loovad vidinaid.
| |
| | |
| Kui loote GSettings skeemi, siis peate ära määrama võtmed seadetes , nende tüübid ja vaikeväärtused, samuti ka mõned muud andmed.
| |
| | |
| Tavaliselt skeem on fikseeritud tee, mis määrab ära kuhu seaded salvestatakse. Kuid skeeme saab ka "ümbersuunata", st ei pea ole fikseeritud tee. See on kasulik näiteks kui skeem kirjeldab "konto", ja sa tahad salvestada suvalise arvu kontosid. | |
| | |
| Erinevalt teistest konfiguratsiooni süsteemidest (nagu GConf), GSettings ei piira võtmed põhitüüpe nagu stringid ja numbrid. GSettings salvestab väärtused nagu '''GVariant''', ja võimaldab igale '''GVariantType''' võtmeid. '''Key''' nimed on piiratud väiketähede, numbrite ja "-". Lisaks nimed peavad algama väiketähega, ei tohi lõppeda '-', ja ei tohi sisaldada järjestikku kriipsusid.
| |
| | |
| Sarnaselt '''GConf''', vaikeväärtusi GSettings skeemides saab lokaliseerida, kuid lokaliseeritud väärtused salvestatakse '''gettext''' kataloogidesse ja vaadata saa neid kui domeene, mis on kirjas '''gettext-domeeni''' atribuutides <schemalist> või <schema> elemendid ja kategooria, mis on täpsustatud l10n atribuut <key> elemendis.
| |
| | |
| GSettings kasutab skeeme kompaktses kahendvormis, mis on loodud glib-compile-schemas utiliidis. Skeemi sisend on XML-vormingus, mida kirjeldab järgmine DTD:
| |
| | |
| <pre>
| |
| | |
| <!ELEMENT schemalist (schema|enum)* >
| |
| <!ATTLIST schemalist gettext-domain #IMPLIED >
| |
| | |
| <!ELEMENT schema (key|child|override)* >
| |
| <!ATTLIST schema id CDATA #REQUIRED
| |
| path CDATA #IMPLIED
| |
| gettext-domain CDATA #IMPLIED
| |
| extends CDATA #IMPLIED
| |
| list-of CDATA #IMPLIED >
| |
| | |
| <!-- enumerated and flags types -->
| |
| <!-- each value element maps a nick to a numeric value -->
| |
| <!ELEMENT enum (value*) >
| |
| <!ATTLIST enum id CDATA #REQUIRED >
| |
| | |
| <!ELEMENT flags (value*) >
| |
| <!ATTLIST flags id CDATA #REQUIRED >
| |
| | |
| <!ELEMENT value EMPTY >
| |
| <!-- nick must be at least 2 characters long -->
| |
| <!-- value must be parsable as a 32-bit integer -->
| |
| <!ELEMENT value nick #REQUIRED
| |
| value #REQUIRED >
| |
| | |
| <!ELEMENT key (default|summary?|description?|range?|choices?|aliases?) >
| |
| <!-- name can only contain lowercase letters, numbers and '-' -->
| |
| <!-- type must be a GVariant type string -->
| |
| <!-- enum must be the id of an enum type that has been defined earlier -->
| |
| <!-- flags must be the id of a flags type that has been defined earlier -->
| |
| <!-- exactly one of type, enum or flags must be given -->
| |
| <!ATTLIST key name CDATA #REQUIRED
| |
| type CDATA #IMPLIED
| |
| enum CDATA #IMPLIED
| |
| flags CDATA #IMPLIED >
| |
| | |
| <!-- the default value is specified a a serialized GVariant,
| |
| i.e. you have to include the quotes when specifying a string -->
| |
| <!ELEMENT default (#PCDATA) >
| |
| <!-- the presence of the l10n attribute marks a default value for
| |
| translation, its value is the gettext category to use -->
| |
| <!-- if context is present, it specifies msgctxt to use -->
| |
| <!ATTLIST default l10n (messages|time) #IMPLIED
| |
| context CDATA #IMPLIED >
| |
| | |
| <!ELEMENT summary (#PCDATA) >
| |
| <!ELEMENT description (#PCDATA) >
| |
| | |
| <!-- range is only allowed for keys with numeric type -->
| |
| <!ELEMENT range EMPTY >
| |
| <!-- min and max must be parseable as values of the key type and min < max -->
| |
| <!ATTLIST range min CDATA #REQUIRED
| |
| max CDATA #REQUIRED >
| |
| | |
| <!-- choices is only allowed for keys with string or string array type -->
| |
| <!ELEMENT choices (choice+) >
| |
| <!-- each choice element specifies one possible value -->
| |
| <!ELEMENT choice EMPTY >
| |
| <!ATTLIST choice value CDATA #REQUIRED >
| |
| | |
| <!-- aliases is only allowed for keys with enumerated type or with choices -->
| |
| <!ELEMENT aliases (alias+) >
| |
| <!-- each alias element specifies an alias for one of the possible values -->
| |
| <!ELEMENT alias EMPTY >
| |
| <!ATTLIST alias value CDATA #REQUIRED >
| |
| | |
| <!ELEMENT child EMPTY >
| |
| <!ATTLIST child name CDATA #REQUIRED
| |
| schema CDATA #REQUIRED >
| |
| | |
| <!ELEMENT override (#PCDATA) >
| |
| <!ATTLIST override name CDATA #REQUIRED
| |
| l10n CDATA #IMPLIED
| |
| context CDATA #IMPLIED >
| |
| </pre>
| |
|
| |
|
| glib-compile-schemas skeemide failid peavad olema laiendiga .gschema.xml
| | ==Näited com.ubuntu.update-notifier ja org.gnome.desktop.background schemadega ubuntu 11.04 peal== |
| | |
| Skeemi käivitamisel identifitseeritakse ID (vastavalt ID atribuut <skeemi> element).Konventsiooni skeemi id-s kasutatakse punktiir nime, sarnane stiili on D-Busi kasutatakse, nt "org.gnome.SessionManager". Eriti siis, kui seadistatud on konkreetne teenus, mis omab D-Busi omadusi, D-Busi bus nimi ja skeemi id peaksid olema võrdsed. Sest skeemis, käsitletavad sätted ei tohiks ole seotud ühegi nime rakendus ID-ga ja ei tohi kasutada StudlyCaps, nt "org.gnome.font-teisendamine".
| |
| | |
| Lisaks '''GVariant''' tüübi, võtmed võivad olla tüüpide loetletud liigid. Neid saab kirjeldada <choice>, <enum> või <flags> elemente, vt näide '''12, "Vahemikud, valikuid ja loetletud tüübid"'''.Alusvara tüübist selline võti on string, kuid võite kasutada '''g_settings_get_enum ()''', '''g_settings_set_enum ()''', '''g_settings_get_flags ()''', '''g_settings_set_flags ()''' juurdepääsu arvväärtused vastab stringi väärtus enum ja flags võtmed.
| |
| | |
| ==Näide 11. vaikimisi väärtused==
| |
|
| |
|
| | et näha kogu installitud schemade nimekirja: |
| | gsettings list-schemas |
| <pre> | | <pre> |
| <schemalist>
| | org.gnome.desktop.session |
| <schema id="org.gtk.Test" path="/tests/" gettext-domain="test">
| | org.gnome.totem.plugins.pythonconsole |
| | | org.compiz.integrated |
| <key name="greeting" type="s">
| | com.ubuntu.update-notifier |
| <default l10n="messages">"Hello, earthlings"</default>
| | org.gnome.gnome-system-monitor.proctree |
| <summary>A greeting</summary>
| | org.gnome.nautilus |
| <description>
| | org.freedesktop.Geoclue</pre> |
| Greeting of the invading martians
| |
| </description>
| |
| </key>
| |
| | |
| <key name="box" type="(ii)">
| |
| <default>(20,30)</default>
| |
| </key>
| |
| | |
| </schema>
| |
| </schemalist>
| |
| </pre> | |
| | |
| ==Näide 12. Vahemikud, valikuid ja loetletud tüübid==
| |
|
| |
|
| | et näha võtmeid, mida need schemad sisaldavad: |
| | gsettings list-keys com.ubuntu.update-notifier |
| <pre> | | <pre> |
| <schemalist> | | auto-launch |
| | end-system-uids |
| | hide-reboot-notification |
| | no-show-notifications |
| | regular-auto-launch-interval |
| | release-check-time |
| | show-apport-crashes</pre> |
|
| |
|
| <enum id="org.gtk.Test.myenum">
| | et näha võtme väärtust: |
| <value nick="first" value="1"/>
| |
| <value nick="second" value="2"/>
| |
| </enum>
| |
|
| |
|
| <flags id="org.gtk.Test.myflags">
| | <pre>gsettings get com.ubuntu.update-notifier auto-launch 'true'</pre> |
| <value nick="flag1" value="1"/>
| |
| <value nick="flag2" value="2"/>
| |
| <value nick="flag3" value="4"/>
| |
| </flags>
| |
|
| |
|
| <schema id="org.gtk.Test">
| | et muuta võtme väärtust: |
| | <pre>gsettings set com.ubuntu.update-notifier auto-launch 'false'</pre> |
|
| |
|
| <key name="key-with-range" type="i">
| | et taastada võtme väärtus tagasi vaikimisi väärtuseks: |
| <range min="1" max="100"/>
| | <pre>gsettings reset com.ubuntu.update-notifier auto-launch</pre> |
| <default>10</default>
| |
| </key>
| |
| | |
| <key name="key-with-choices" type="s">
| |
| <choices>
| |
| <choice value='Elisabeth'/>
| |
| <choice value='Annabeth'/>
| |
| <choice value='Joe'/>
| |
| </choices>
| |
| <aliases>
| |
| <alias value='Anna' target='Annabeth'/>
| |
| <alias value='Beth' target='Elisabeth'/>
| |
| </aliases>
| |
| <default>'Joe'</default>
| |
| </key>
| |
| | |
| <key name='enumerated-key' enum='org.gtk.Test.myenum'>
| |
| <default>'first'</default>
| |
| </key>
| |
| | |
| <key name='flags-key' flags='org.gtk.Test.myflags'>
| |
| <default>["flag1",flag2"]</default>
| |
| </key>
| |
| </schema>
| |
| </schemalist>
| |
| </pre> | |
| | |
| ==Vendor overrides==
| |
| | |
| Vaikimisi väärtused on ära määratletud skeemides, et saada installitud rakendusi. Mõnikord on vaja müüja või turustaja need kohandanud nii, et neid ei saa täida. Kuna XML faili lappimine on ebamugav ja võib tekkida palju vigu, siis glib-compile-skeem loeb nn vendor override "faile. Need võtmefailid on samas kataloogis kus XML-skeemi allikaid, mida saavad vaikeväärtused.Skeemi ID tuleb grupi nime võtmefail ja väärtused saab GVariant kujul, nagu järgmises näites:
| |
|
| |
|
| | vaatame org.gnome.desktop.background schema võtmeid: |
| | gsettings list-keys org.gnome.desktop.background |
| <pre> | | <pre> |
| [org.gtk.Example]
| | color-shading-type |
| key1='string'
| | draw-background |
| key2=1.5
| | picture-opacity |
| </pre> | | picture-options |
| | | picture-uri |
| glib-compile-schemas expects schema files to have the extension .gschema.override
| | primary-color |
| | secondary-color |
| | show-desktop-icons</pre> |
|
| |
|
| | küsime praeguse tagataustapildi URI võtme väärtust: |
| | <pre>gsettings get org.gnome.desktop.background picture-uri |
| | 'file:///usr/share/backgrounds/warty-final-ubuntu.png'</pre> |
|
| |
|
| | muudame asukohta kust võetakse taustapilt: |
| | <pre>gsettings set org.gnome.desktop.background picture-uri 'file:///home/kasutaja/Pictures/pilt.jpg' </pre> |
|
| |
|
| | kui veateadet ei tule, oli järelikult seadete muutmine edukas. |
|
| |
|
| | ==Kokkuvõte== |
|
| |
|
| | Gsettings on suhteliselt lihtne, kuid alati mitte kõige otstarbekam lahendus seadeid muuta, näiteks taustapilt laetakse uuesti alles järgmise startupiga. |
|
| |
|
| | ==Kasutatud kirjandus== |
|
| |
|
| | https://developer.gnome.org/gio/2.33/GSettings.html |
| | http://www.burtonini.com/blog/computers/gsettings-override-2011-07-04-15-45 |
| | http://www.linuxfromscratch.org/blfs/view/svn/gnome/gsettings-desktop-schemas.html |
|
| |
|
| | ==Autor== |
|
| |
|
| Marek Lepla A32
| | Tammo Oolup A32 |
|
| |
|
| [[Category: Operatsioonisüsteemide administreerimine ja sidumine]] | | [[Category: Operatsioonisüsteemide administreerimine ja sidumine]] |
Sissejuhatus
Gsettings classi abil saame muuta aplikatsioonide seadeid. Seadete lugemine Gsettinguga on väga kiire, nagu ka kirjutamine.
Kui teha Gsettingu instants, tuleb kõigepealt täpsustada schema mis kirjeldab seadete võtmeid, nende tüüpe, vaikimisiväärtusi ja muud infot.
Tavaliselt schema, mis on loetelu saadaval olevatest seadetest aplikatsioonile, omab fikseeritud teed(asukohta) mis ütleb kus globaalsel tasemel seadeid hoitakse.
Schemad saavad olla ka ümber paigutatud, ehk mitte kindla asukohaga.
Võtme nimed on piiratud väikeste tähtedena, numbrite ja '-'-ga. Nimed peavad algama väikese tähega, ei või sisaldada numbreid ja ei tohi lõppeda '-'ga
Näited com.ubuntu.update-notifier ja org.gnome.desktop.background schemadega ubuntu 11.04 peal
et näha kogu installitud schemade nimekirja:
gsettings list-schemas
org.gnome.desktop.session
org.gnome.totem.plugins.pythonconsole
org.compiz.integrated
com.ubuntu.update-notifier
org.gnome.gnome-system-monitor.proctree
org.gnome.nautilus
org.freedesktop.Geoclue
et näha võtmeid, mida need schemad sisaldavad:
gsettings list-keys com.ubuntu.update-notifier
auto-launch
end-system-uids
hide-reboot-notification
no-show-notifications
regular-auto-launch-interval
release-check-time
show-apport-crashes
et näha võtme väärtust:
gsettings get com.ubuntu.update-notifier auto-launch 'true'
et muuta võtme väärtust:
gsettings set com.ubuntu.update-notifier auto-launch 'false'
et taastada võtme väärtus tagasi vaikimisi väärtuseks:
gsettings reset com.ubuntu.update-notifier auto-launch
vaatame org.gnome.desktop.background schema võtmeid:
gsettings list-keys org.gnome.desktop.background
color-shading-type
draw-background
picture-opacity
picture-options
picture-uri
primary-color
secondary-color
show-desktop-icons
küsime praeguse tagataustapildi URI võtme väärtust:
gsettings get org.gnome.desktop.background picture-uri
'file:///usr/share/backgrounds/warty-final-ubuntu.png'
muudame asukohta kust võetakse taustapilt:
gsettings set org.gnome.desktop.background picture-uri 'file:///home/kasutaja/Pictures/pilt.jpg'
kui veateadet ei tule, oli järelikult seadete muutmine edukas.
Kokkuvõte
Gsettings on suhteliselt lihtne, kuid alati mitte kõige otstarbekam lahendus seadeid muuta, näiteks taustapilt laetakse uuesti alles järgmise startupiga.
Kasutatud kirjandus
https://developer.gnome.org/gio/2.33/GSettings.html
http://www.burtonini.com/blog/computers/gsettings-override-2011-07-04-15-45
http://www.linuxfromscratch.org/blfs/view/svn/gnome/gsettings-desktop-schemas.html
Autor
Tammo Oolup A32