diff --git a/Makefile b/Makefile index 627f2ab..b0aee53 100644 --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ build: build-clean --extra-source=./config.js \ --extra-source=./convenience.js \ --extra-source=./utils.js \ + --extra-source=./icons/ \ --extra-source=./modules/ \ --extra-source=./preferences/ \ --extra-source=./schemas/ \ diff --git a/res/screenshot.png b/res/screenshot.png index 292d273..c760727 100644 Binary files a/res/screenshot.png and b/res/screenshot.png differ diff --git a/src/icons/hicolor/scalable/categories/preferences-backgrounds-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-backgrounds-symbolic.svg new file mode 100644 index 0000000..722353f --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-backgrounds-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-commands-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-commands-symbolic.svg new file mode 100644 index 0000000..ffec3b8 --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-commands-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-cursortheme-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-cursortheme-symbolic.svg new file mode 100644 index 0000000..0b8ebeb --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-cursortheme-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-gtktheme-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-gtktheme-symbolic.svg new file mode 100644 index 0000000..bfc88f0 --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-gtktheme-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-icontheme-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-icontheme-symbolic.svg new file mode 100644 index 0000000..94234b9 --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-icontheme-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-schedule-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-schedule-symbolic.svg new file mode 100644 index 0000000..6751113 --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-schedule-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/icons/hicolor/scalable/categories/preferences-shelltheme-symbolic.svg b/src/icons/hicolor/scalable/categories/preferences-shelltheme-symbolic.svg new file mode 100644 index 0000000..991a8e7 --- /dev/null +++ b/src/icons/hicolor/scalable/categories/preferences-shelltheme-symbolic.svg @@ -0,0 +1 @@ + diff --git a/src/po/fr.po b/src/po/fr.po index c48a033..25d4c69 100644 --- a/src/po/fr.po +++ b/src/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: Night Theme Switcher 7\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-23 20:13+0200\n" +"POT-Creation-Date: 2020-09-24 13:12+0200\n" "PO-Revision-Date: 2020-09-23 20:13+0200\n" "Last-Translator: Romain Vigier \n" "Language-Team: French - France \n" @@ -48,26 +48,28 @@ msgid "Switch to day theme" msgstr "Passer au thème diurne" #: src/preferences/Backgrounds.js:36 src/preferences/ui/backgrounds.ui:145 +#: src/preferences/ui/headerbar.ui:338 msgid "Backgrounds" msgstr "Arrière-plans" #: src/preferences/Commands.js:36 src/preferences/ui/commands.ui:132 +#: src/preferences/ui/headerbar.ui:391 msgid "Commands" msgstr "Commandes" -#: src/preferences/CursorTheme.js:38 +#: src/preferences/CursorTheme.js:38 src/preferences/ui/headerbar.ui:285 msgid "Cursor theme" msgstr "Thème de curseur" -#: src/preferences/GtkTheme.js:38 +#: src/preferences/GtkTheme.js:38 src/preferences/ui/headerbar.ui:126 msgid "GTK theme" msgstr "Thème GTK" -#: src/preferences/IconTheme.js:38 +#: src/preferences/IconTheme.js:38 src/preferences/ui/headerbar.ui:232 msgid "Icon theme" msgstr "Thème d’icônes" -#: src/preferences/Schedule.js:38 +#: src/preferences/Schedule.js:38 src/preferences/ui/headerbar.ui:73 msgid "Schedule" msgstr "Horaires" @@ -75,7 +77,7 @@ msgstr "Horaires" msgid "Choose" msgstr "Choisir" -#: src/preferences/ShellTheme.js:38 +#: src/preferences/ShellTheme.js:38 src/preferences/ui/headerbar.ui:179 msgid "Shell theme" msgstr "Thème du shell" diff --git a/src/po/nightthemeswitcher@romainvigier.fr.pot b/src/po/nightthemeswitcher@romainvigier.fr.pot index df0b3e9..28a47eb 100644 --- a/src/po/nightthemeswitcher@romainvigier.fr.pot +++ b/src/po/nightthemeswitcher@romainvigier.fr.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Night Theme Switcher 37\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-09-23 20:13+0200\n" +"POT-Creation-Date: 2020-09-24 13:12+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,26 +41,28 @@ msgid "Switch to day theme" msgstr "" #: src/preferences/Backgrounds.js:36 src/preferences/ui/backgrounds.ui:145 +#: src/preferences/ui/headerbar.ui:338 msgid "Backgrounds" msgstr "" #: src/preferences/Commands.js:36 src/preferences/ui/commands.ui:132 +#: src/preferences/ui/headerbar.ui:391 msgid "Commands" msgstr "" -#: src/preferences/CursorTheme.js:38 +#: src/preferences/CursorTheme.js:38 src/preferences/ui/headerbar.ui:285 msgid "Cursor theme" msgstr "" -#: src/preferences/GtkTheme.js:38 +#: src/preferences/GtkTheme.js:38 src/preferences/ui/headerbar.ui:126 msgid "GTK theme" msgstr "" -#: src/preferences/IconTheme.js:38 +#: src/preferences/IconTheme.js:38 src/preferences/ui/headerbar.ui:232 msgid "Icon theme" msgstr "" -#: src/preferences/Schedule.js:38 +#: src/preferences/Schedule.js:38 src/preferences/ui/headerbar.ui:73 msgid "Schedule" msgstr "" @@ -68,7 +70,7 @@ msgstr "" msgid "Choose" msgstr "" -#: src/preferences/ShellTheme.js:38 +#: src/preferences/ShellTheme.js:38 src/preferences/ui/headerbar.ui:179 msgid "Shell theme" msgstr "" diff --git a/src/preferences/Headerbar.js b/src/preferences/Headerbar.js new file mode 100644 index 0000000..c6c1cec --- /dev/null +++ b/src/preferences/Headerbar.js @@ -0,0 +1,66 @@ +/* +Night Theme Switcher Gnome Shell extension + +Copyright (C) 2020 Romain Vigier + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . +*/ + +const { GLib, Gtk } = imports.gi; +const { extensionUtils } = imports.misc; + +const Me = extensionUtils.getCurrentExtension(); + +const Gettext = imports.gettext.domain(Me.metadata.uuid); +const _ = Gettext.gettext; + +const utils = Me.imports.utils; + + +var Headerbar = class { + + constructor(stack) { + this._builder = new Gtk.Builder(); + this._builder.add_from_file(GLib.build_filenamev([Me.path, 'preferences', 'ui', 'headerbar.ui'])); + + this.widget = this._builder.get_object('headerbar'); + + this._connect(stack); + + return this.widget; + } + + _connect(stack) { + const scheduleRadio = this._builder.get_object('schedule_radio'); + scheduleRadio.connect('clicked', () => stack.set_visible_child_name('schedule')); + + const gtkThemeRadio = this._builder.get_object('gtk_theme_radio'); + gtkThemeRadio.connect('clicked', () => stack.set_visible_child_name('gtk-theme')); + + const shellThemeRadio = this._builder.get_object('shell_theme_radio'); + shellThemeRadio.connect('clicked', () => stack.set_visible_child_name('shell-theme')); + + const iconThemeRadio = this._builder.get_object('icon_theme_radio'); + iconThemeRadio.connect('clicked', () => stack.set_visible_child_name('icon-theme')); + + const cursorThemeRadio = this._builder.get_object('cursor_theme_radio'); + cursorThemeRadio.connect('clicked', () => stack.set_visible_child_name('cursor-theme')); + + const backgroundsRadio = this._builder.get_object('backgrounds_radio'); + backgroundsRadio.connect('clicked', () => stack.set_visible_child_name('backgrounds')); + + const commandsRadio = this._builder.get_object('commands_radio'); + commandsRadio.connect('clicked', () => stack.set_visible_child_name('commands')); + } + +}; diff --git a/src/preferences/Preferences.js b/src/preferences/Preferences.js index 0c8a8cf..9a945ac 100644 --- a/src/preferences/Preferences.js +++ b/src/preferences/Preferences.js @@ -31,6 +31,8 @@ const { IconThemePreferences } = Me.imports.preferences.IconTheme; const { SchedulePreferences } = Me.imports.preferences.Schedule; const { ShellThemePreferences } = Me.imports.preferences.ShellTheme; +const { Headerbar } = Me.imports.preferences.Headerbar; + var Preferences = class { @@ -66,10 +68,7 @@ var Preferences = class { const commandsPreferences = new CommandsPreferences(this.settings); this.widget.add_titled(commandsPreferences.widget, commandsPreferences.name, commandsPreferences.title); - this.titlebar = new Gtk.StackSwitcher({ - stack: this.widget, - visible: true, - }); + this.headerbar = new Headerbar(this.widget); } }; diff --git a/src/preferences/ui/headerbar.ui b/src/preferences/ui/headerbar.ui new file mode 100644 index 0000000..790c662 --- /dev/null +++ b/src/preferences/ui/headerbar.ui @@ -0,0 +1,417 @@ + + + + + + + + + + + True + False + True + + + True + False + True + + + True + True + False + False + True + False + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-schedule-symbolic + 2 + + + False + True + 0 + + + + + True + False + Schedule + + + + + + False + True + 1 + + + + + + + False + True + 0 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-gtktheme-symbolic + 2 + + + False + True + 0 + + + + + True + False + GTK theme + + + + + + False + True + 1 + + + + + + + False + True + 1 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-shelltheme-symbolic + 2 + + + False + True + 0 + + + + + True + False + Shell theme + + + + + + False + True + 1 + + + + + + + False + True + 2 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-icontheme-symbolic + 2 + + + False + True + 0 + + + + + True + False + Icon theme + + + + + + False + True + 1 + + + + + + + False + True + 3 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-cursortheme-symbolic + 2 + + + False + True + 0 + + + + + True + False + Cursor theme + + + + + + False + True + 1 + + + + + + + False + True + 4 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-backgrounds-symbolic + 2 + + + False + True + 0 + + + + + True + False + Backgrounds + + + + + + False + True + 1 + + + + + + + False + True + 5 + + + + + True + True + False + False + False + schedule_radio + + + True + False + 4 + 4 + vertical + 4 + + + True + False + preferences-commands-symbolic + 2 + + + False + True + 0 + + + + + True + False + Commands + + + + + + False + True + 1 + + + + + + + False + True + 6 + + + + + + + diff --git a/src/prefs.js b/src/prefs.js index b8f0d75..d99b377 100644 --- a/src/prefs.js +++ b/src/prefs.js @@ -18,7 +18,7 @@ this program. If not, see . 'use strict'; -const { GLib } = imports.gi; +const { GLib, Gtk } = imports.gi; const { extensionUtils } = imports.misc; const Me = extensionUtils.getCurrentExtension(); @@ -29,15 +29,16 @@ const { Preferences } = Me.imports.preferences.Preferences; function init() { compat.initTranslations(Me.metadata.uuid); + const iconTheme = Gtk.IconTheme.get_default(); + iconTheme.append_search_path(GLib.build_filenamev([Me.path, 'icons'])); } function buildPrefsWidget() { const preferences = new Preferences(); GLib.idle_add(GLib.PRIORITY_DEFAULT, () => { const window = preferences.widget.get_toplevel(); - window.resize(800, 200); - const titlebar = window.get_titlebar(); - titlebar.custom_title = preferences.titlebar; + window.resize(600, 200); + window.set_titlebar(preferences.headerbar); }); return preferences.widget; }