From 5a92981056595b9a600cd2ad87d41a7f997ec9d8 Mon Sep 17 00:00:00 2001 From: Gotam Gorabh Date: Sat, 27 May 2023 23:58:24 +0530 Subject: [PATCH 1/6] system: Add new Sytem panel This is the basic panel structure which will contain the pages for the "System" panel, per mockups in https://gitlab.gnome.org/Teams/Design/settings-mockups/-/blob/master/system/system-panel.png See #2241 --- panels/meson.build | 1 + panels/system/cc-system-panel.c | 54 +++++++++++++++++++++ panels/system/cc-system-panel.h | 31 ++++++++++++ panels/system/cc-system-panel.ui | 36 ++++++++++++++ panels/system/gnome-system-panel.desktop.in | 14 ++++++ panels/system/meson.build | 32 ++++++++++++ panels/system/system.gresource.xml | 6 +++ shell/cc-panel-list.c | 1 + shell/cc-panel-loader.c | 2 + 9 files changed, 177 insertions(+) create mode 100644 panels/system/cc-system-panel.c create mode 100644 panels/system/cc-system-panel.h create mode 100644 panels/system/cc-system-panel.ui create mode 100644 panels/system/gnome-system-panel.desktop.in create mode 100644 panels/system/meson.build create mode 100644 panels/system/system.gresource.xml diff --git a/panels/meson.build b/panels/meson.build index 5f29894718..bb37766a91 100644 --- a/panels/meson.build +++ b/panels/meson.build @@ -19,6 +19,7 @@ panels = [ 'search', 'sharing', 'sound', + 'system', 'universal-access', 'user-accounts', 'wwan', diff --git a/panels/system/cc-system-panel.c b/panels/system/cc-system-panel.c new file mode 100644 index 0000000000..9fb2e67ab0 --- /dev/null +++ b/panels/system/cc-system-panel.c @@ -0,0 +1,54 @@ +/* + * cc-system-panel.c + * + * Copyright 2023 Gotam Gorabh + * + * 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 . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include + +#include + +#include "cc-list-row.h" +#include "cc-system-panel.h" +#include "cc-system-resources.h" + +struct _CcSystemPanel +{ + CcPanel parent_instance; + + AdwNavigationView *navigation; +}; + +CC_PANEL_REGISTER (CcSystemPanel, cc_system_panel) + +static void +cc_system_panel_class_init (CcSystemPanelClass *klass) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/system/cc-system-panel.ui"); + + gtk_widget_class_bind_template_child (widget_class, CcSystemPanel, navigation); +} + +static void +cc_system_panel_init (CcSystemPanel *self) +{ + g_resources_register (cc_system_get_resource ()); + gtk_widget_init_template (GTK_WIDGET (self)); +} diff --git a/panels/system/cc-system-panel.h b/panels/system/cc-system-panel.h new file mode 100644 index 0000000000..fe7a7edfa7 --- /dev/null +++ b/panels/system/cc-system-panel.h @@ -0,0 +1,31 @@ +/* + * cc-system-panel.h + * + * Copyright 2023 Gotam Gorabh + * + * 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 . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#pragma once + +#include + +G_BEGIN_DECLS + +#define CC_TYPE_SYSTEM_PANEL (cc_system_panel_get_type ()) +G_DECLARE_FINAL_TYPE (CcSystemPanel, cc_system_panel, CC, SYSTEM_PANEL, CcPanel) + +G_END_DECLS \ No newline at end of file diff --git a/panels/system/cc-system-panel.ui b/panels/system/cc-system-panel.ui new file mode 100644 index 0000000000..1e39660463 --- /dev/null +++ b/panels/system/cc-system-panel.ui @@ -0,0 +1,36 @@ + + + + diff --git a/panels/system/gnome-system-panel.desktop.in b/panels/system/gnome-system-panel.desktop.in new file mode 100644 index 0000000000..43308ddfdf --- /dev/null +++ b/panels/system/gnome-system-panel.desktop.in @@ -0,0 +1,14 @@ +[Desktop Entry] +Name=System +Comment=Take a tour of system panel +Exec=gnome-control-center system +# Translators: Do NOT translate or transliterate this text (this is an icon file name)! +Icon=emblem-system-symbolic +Terminal=false +Type=Application +NoDisplay=true +StartupNotify=true +Categories=GNOME;GTK;Settings;X-GNOME-Settings-Panel;X-GNOME-DetailsSettings; +OnlyShowIn=GNOME;Unity; +# Translators: Search terms to find the System panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! +Keywords=System; diff --git a/panels/system/meson.build b/panels/system/meson.build new file mode 100644 index 0000000000..fed92cd25f --- /dev/null +++ b/panels/system/meson.build @@ -0,0 +1,32 @@ +panels_list += cappletname +desktop = 'gnome-@0@-panel.desktop'.format(cappletname) + +i18n.merge_file( + type: 'desktop', + input: desktop + '.in', + output: desktop, + po_dir: po_dir, + install: true, + install_dir: control_center_desktopdir +) + +sources = files( + 'cc-system-panel.c', +) + +sources += gnome.compile_resources( + 'cc-' + cappletname + '-resources', + cappletname + '.gresource.xml', + c_name : 'cc_' + cappletname, + export : true +) + +deps = common_deps + +panels_libs += static_library( + cappletname, + sources: sources, + include_directories: [ top_inc, common_inc ], + dependencies: deps, + c_args: cflags +) diff --git a/panels/system/system.gresource.xml b/panels/system/system.gresource.xml new file mode 100644 index 0000000000..125d72dc34 --- /dev/null +++ b/panels/system/system.gresource.xml @@ -0,0 +1,6 @@ + + + + cc-system-panel.ui + + diff --git a/shell/cc-panel-list.c b/shell/cc-panel-list.c index a0dba145c7..037a3200b7 100644 --- a/shell/cc-panel-list.c +++ b/shell/cc-panel-list.c @@ -374,6 +374,7 @@ static const gchar * const panel_order[] = { "color", /* Details page */ + "system", "region", "universal-access", "user-accounts", diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c index aa7ed3cb35..4541c02631 100644 --- a/shell/cc-panel-loader.c +++ b/shell/cc-panel-loader.c @@ -56,6 +56,7 @@ extern GType cc_region_panel_get_type (void); extern GType cc_search_panel_get_type (void); extern GType cc_sharing_panel_get_type (void); extern GType cc_sound_panel_get_type (void); +extern GType cc_system_panel_get_type (void); extern GType cc_ua_panel_get_type (void); extern GType cc_user_panel_get_type (void); #ifdef BUILD_WACOM @@ -111,6 +112,7 @@ static CcPanelLoaderVtable default_panels[] = PANEL_TYPE("search", cc_search_panel_get_type, NULL), PANEL_TYPE("sharing", cc_sharing_panel_get_type, NULL), PANEL_TYPE("sound", cc_sound_panel_get_type, NULL), + PANEL_TYPE("system", cc_system_panel_get_type, NULL), PANEL_TYPE("universal-access", cc_ua_panel_get_type, NULL), PANEL_TYPE("user-accounts", cc_user_panel_get_type, NULL), #ifdef BUILD_WACOM -- GitLab From 72973b9a8a4669e3fa9da50c2dafe86ffdb6e1d7 Mon Sep 17 00:00:00 2001 From: Gotam Gorabh Date: Tue, 27 Jun 2023 20:57:01 +0530 Subject: [PATCH 2/6] system: Add 'Region Language' panel to system panel Adding Region & Language page to the system panel. https://gitlab.gnome.org/Teams/Design/settings-mockups/-/blob/master/system/system-panel.png See #2241 --- panels/meson.build | 1 - panels/region/.indent.pro | 2 - panels/region/gnome-region-panel.desktop.in | 14 -- panels/region/meson.build | 45 ---- panels/region/region.gresource.xml | 11 - panels/system/cc-system-panel.c | 4 + panels/system/cc-system-panel.ui | 35 ++- panels/system/meson.build | 16 +- .../{ => system}/region/cc-format-chooser.c | 2 +- .../{ => system}/region/cc-format-chooser.h | 0 .../{ => system}/region/cc-format-chooser.ui | 0 .../{ => system}/region/cc-format-preview.c | 2 +- .../{ => system}/region/cc-format-preview.h | 0 .../{ => system}/region/cc-format-preview.ui | 0 .../region/cc-region-page.c} | 223 +++++++++--------- .../region/cc-region-page.h} | 15 +- .../region/cc-region-page.ui} | 19 +- .../icons => system/region}/meson.build | 2 +- .../org.gnome.Settings-region-symbolic.svg | 0 .../region/view-layout-symbolic.svg | 0 panels/system/system.gresource.xml | 7 + shell/cc-panel-list.c | 1 - shell/cc-panel-loader.c | 2 - 23 files changed, 186 insertions(+), 215 deletions(-) delete mode 100644 panels/region/.indent.pro delete mode 100644 panels/region/gnome-region-panel.desktop.in delete mode 100644 panels/region/meson.build delete mode 100644 panels/region/region.gresource.xml rename panels/{ => system}/region/cc-format-chooser.c (99%) rename panels/{ => system}/region/cc-format-chooser.h (100%) rename panels/{ => system}/region/cc-format-chooser.ui (100%) rename panels/{ => system}/region/cc-format-preview.c (99%) rename panels/{ => system}/region/cc-format-preview.h (100%) rename panels/{ => system}/region/cc-format-preview.ui (100%) rename panels/{region/cc-region-panel.c => system/region/cc-region-page.c} (86%) rename panels/{region/cc-region-panel.h => system/region/cc-region-page.h} (72%) rename panels/{region/cc-region-panel.ui => system/region/cc-region-page.ui} (87%) rename panels/{region/icons => system/region}/meson.build (64%) rename panels/{region/icons/scalable => system/region}/org.gnome.Settings-region-symbolic.svg (100%) rename panels/{ => system}/region/view-layout-symbolic.svg (100%) diff --git a/panels/meson.build b/panels/meson.build index bb37766a91..219c89815b 100644 --- a/panels/meson.build +++ b/panels/meson.build @@ -15,7 +15,6 @@ panels = [ 'power', 'printers', 'privacy', - 'region', 'search', 'sharing', 'sound', diff --git a/panels/region/.indent.pro b/panels/region/.indent.pro deleted file mode 100644 index bdff07415b..0000000000 --- a/panels/region/.indent.pro +++ /dev/null @@ -1,2 +0,0 @@ --kr -i8 -pcs -lps -psl - diff --git a/panels/region/gnome-region-panel.desktop.in b/panels/region/gnome-region-panel.desktop.in deleted file mode 100644 index b28b432137..0000000000 --- a/panels/region/gnome-region-panel.desktop.in +++ /dev/null @@ -1,14 +0,0 @@ -[Desktop Entry] -Name=Region & Language -Comment=Select your display language and formats -Exec=gnome-control-center region -# Translators: Do NOT translate or transliterate this text (this is an icon file name)! -Icon=org.gnome.Settings-region-symbolic -Terminal=false -Type=Application -NoDisplay=true -StartupNotify=true -Categories=GNOME;GTK;Settings;DesktopSettings;X-GNOME-Settings-Panel;X-GNOME-DetailsSettings; -OnlyShowIn=GNOME;Unity; -# Translators: Search terms to find the Region and Language panel. Do NOT translate or localize the semicolons! The list MUST also end with a semicolon! -Keywords=Language;Layout;Keyboard;Input; diff --git a/panels/region/meson.build b/panels/region/meson.build deleted file mode 100644 index e5e7709aca..0000000000 --- a/panels/region/meson.build +++ /dev/null @@ -1,45 +0,0 @@ -panels_list += cappletname -desktop = 'gnome-@0@-panel.desktop'.format(cappletname) - -i18n.merge_file( - type: 'desktop', - input: desktop + '.in', - output: desktop, - po_dir: po_dir, - install: true, - install_dir: control_center_desktopdir -) - -sources = files( - 'cc-region-panel.c', - 'cc-format-chooser.c', - 'cc-format-preview.c', -) - -sources += gnome.compile_resources( - 'cc-' + cappletname + '-resources', - cappletname + '.gresource.xml', - c_name: 'cc_' + cappletname, - export: true -) - -deps = common_deps + [ - accounts_dep, - gnome_desktop_dep, - liblanguage_dep, - polkit_gobject_dep -] - -if enable_ibus - deps += ibus_dep -endif - -panels_libs += static_library( - cappletname, - sources: sources, - include_directories: top_inc, - dependencies: deps, - c_args: cflags -) - -subdir('icons') diff --git a/panels/region/region.gresource.xml b/panels/region/region.gresource.xml deleted file mode 100644 index e3bff86084..0000000000 --- a/panels/region/region.gresource.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - cc-format-chooser.ui - cc-region-panel.ui - cc-format-preview.ui - - - view-layout-symbolic.svg - - diff --git a/panels/system/cc-system-panel.c b/panels/system/cc-system-panel.c index 9fb2e67ab0..8f662e46b5 100644 --- a/panels/system/cc-system-panel.c +++ b/panels/system/cc-system-panel.c @@ -27,6 +27,8 @@ #include "cc-system-panel.h" #include "cc-system-resources.h" +#include "region/cc-region-page.h" + struct _CcSystemPanel { CcPanel parent_instance; @@ -44,6 +46,8 @@ cc_system_panel_class_init (CcSystemPanelClass *klass) gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/system/cc-system-panel.ui"); gtk_widget_class_bind_template_child (widget_class, CcSystemPanel, navigation); + + g_type_ensure (CC_TYPE_REGION_PAGE); } static void diff --git a/panels/system/cc-system-panel.ui b/panels/system/cc-system-panel.ui index 1e39660463..4efe6fd4b2 100644 --- a/panels/system/cc-system-panel.ui +++ b/panels/system/cc-system-panel.ui @@ -1,12 +1,7 @@ diff --git a/panels/system/meson.build b/panels/system/meson.build index fed92cd25f..53db19b97c 100644 --- a/panels/system/meson.build +++ b/panels/system/meson.build @@ -12,6 +12,9 @@ i18n.merge_file( sources = files( 'cc-system-panel.c', + 'region/cc-region-page.c', + 'region/cc-format-chooser.c', + 'region/cc-format-preview.c', ) sources += gnome.compile_resources( @@ -21,7 +24,18 @@ sources += gnome.compile_resources( export : true ) -deps = common_deps +deps = common_deps + [ + accounts_dep, + gnome_desktop_dep, + liblanguage_dep, + polkit_gobject_dep +] + +if enable_ibus + deps += ibus_dep +endif + +subdir('region') panels_libs += static_library( cappletname, diff --git a/panels/region/cc-format-chooser.c b/panels/system/region/cc-format-chooser.c similarity index 99% rename from panels/region/cc-format-chooser.c rename to panels/system/region/cc-format-chooser.c index df6987d3e5..163d27612c 100644 --- a/panels/region/cc-format-chooser.c +++ b/panels/system/region/cc-format-chooser.c @@ -465,7 +465,7 @@ cc_format_chooser_class_init (CcFormatChooserClass *klass) gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Escape, 0, "window.close", NULL); - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/region/cc-format-chooser.ui"); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/system/region/cc-format-chooser.ui"); gtk_widget_class_bind_template_child (widget_class, CcFormatChooser, title_bar); gtk_widget_class_bind_template_child (widget_class, CcFormatChooser, title_buttons); diff --git a/panels/region/cc-format-chooser.h b/panels/system/region/cc-format-chooser.h similarity index 100% rename from panels/region/cc-format-chooser.h rename to panels/system/region/cc-format-chooser.h diff --git a/panels/region/cc-format-chooser.ui b/panels/system/region/cc-format-chooser.ui similarity index 100% rename from panels/region/cc-format-chooser.ui rename to panels/system/region/cc-format-chooser.ui diff --git a/panels/region/cc-format-preview.c b/panels/system/region/cc-format-preview.c similarity index 99% rename from panels/region/cc-format-preview.c rename to panels/system/region/cc-format-preview.c index 61b434b1bb..00fe0b6694 100644 --- a/panels/region/cc-format-preview.c +++ b/panels/system/region/cc-format-preview.c @@ -231,7 +231,7 @@ cc_format_preview_class_init (CcFormatPreviewClass *klass) NULL, G_PARAM_READWRITE)); - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/region/cc-format-preview.ui"); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/system/region/cc-format-preview.ui"); gtk_widget_class_bind_template_child (widget_class, CcFormatPreview, date_format_label); gtk_widget_class_bind_template_child (widget_class, CcFormatPreview, date_time_format_label); diff --git a/panels/region/cc-format-preview.h b/panels/system/region/cc-format-preview.h similarity index 100% rename from panels/region/cc-format-preview.h rename to panels/system/region/cc-format-preview.h diff --git a/panels/region/cc-format-preview.ui b/panels/system/region/cc-format-preview.ui similarity index 100% rename from panels/region/cc-format-preview.ui rename to panels/system/region/cc-format-preview.ui diff --git a/panels/region/cc-region-panel.c b/panels/system/region/cc-region-page.c similarity index 86% rename from panels/region/cc-region-panel.c rename to panels/system/region/cc-region-page.c index 5dbab36992..4b60726914 100644 --- a/panels/region/cc-region-panel.c +++ b/panels/system/region/cc-region-page.c @@ -1,4 +1,6 @@ /* + * cc-region-page.c + * * Copyright (C) 2010 Intel, Inc * * This program is free software; you can redistribute it and/or modify @@ -14,33 +16,38 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see . * - * Author: Sergey Udaltsov - * + * Authors: + * Sergey Udaltsov + * Gotam Gorabh */ -#include +#undef G_LOG_DOMAIN +#define G_LOG_DOMAIN "cc-region-page" + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "cc-common-language.h" +#include "cc-format-chooser.h" +#include "cc-language-chooser.h" +#include "cc-list-row.h" +#include "cc-region-page.h" + +#include +#include #include -#include #include #include #include #include -#include -#include - -#include "cc-region-panel.h" -#include "cc-region-resources.h" -#include "cc-language-chooser.h" -#include "cc-format-chooser.h" -#include "cc-list-row.h" - -#include "cc-common-language.h" #define GNOME_DESKTOP_USE_UNSTABLE_API #include #include -#include +#include +#include #define GNOME_SYSTEM_LOCALE_DIR "org.gnome.system.locale" #define KEY_REGION "region" @@ -52,8 +59,8 @@ typedef enum { SYSTEM, } CcLocaleTarget; -struct _CcRegionPanel { - CcPanel parent_instance; +struct _CcRegionPage { + AdwNavigationPage parent_instance; CcListRow *formats_row; AdwBanner *banner; @@ -63,22 +70,24 @@ struct _CcRegionPanel { CcListRow *login_language_row; GtkListBoxRow *language_row; - gboolean login_auto_apply; - GPermission *permission; - GDBusProxy *localed; - GDBusProxy *session; + gboolean login_auto_apply; + GPermission *permission; + GDBusProxy *localed; + GDBusProxy *session; + + ActUserManager *user_manager; + ActUser *user; + GSettings *locale_settings; - ActUserManager *user_manager; - ActUser *user; - GSettings *locale_settings; + gchar *language; + gchar *region; + gchar *system_language; + gchar *system_region; - gchar *language; - gchar *region; - gchar *system_language; - gchar *system_region; + GCancellable *cancellable; }; -CC_PANEL_REGISTER (CcRegionPanel, cc_region_panel) +G_DEFINE_TYPE (CcRegionPage, cc_region_page, ADW_TYPE_NAVIGATION_PAGE) /* Auxiliary methods */ @@ -94,7 +103,7 @@ get_needs_restart_file (void) } static void -restart_now (CcRegionPanel *self) +restart_now (CcRegionPage *self) { g_autoptr(GFile) file = NULL; @@ -109,9 +118,9 @@ restart_now (CcRegionPanel *self) } static void -set_restart_notification_visible (CcRegionPanel *self, - const gchar *locale, - gboolean visible) +set_restart_notification_visible (CcRegionPage *self, + const gchar *locale, + gboolean visible) { locale_t new_locale; locale_t current_locale; @@ -147,7 +156,7 @@ set_restart_notification_visible (CcRegionPanel *self, } typedef struct { - CcRegionPanel *self; + CcRegionPage *self; int category; gchar *target_locale; } MaybeNotifyData; @@ -167,7 +176,7 @@ maybe_notify_finish (GObject *source, gpointer data) { g_autoptr(MaybeNotifyData) mnd = data; - CcRegionPanel *self = mnd->self; + CcRegionPage *self = mnd->self; g_autoptr(GError) error = NULL; g_autoptr(GVariant) retval = NULL; g_autofree gchar *current_lang_code = NULL; @@ -211,9 +220,9 @@ maybe_notify_finish (GObject *source, } static void -maybe_notify (CcRegionPanel *self, - int category, - const gchar *target_locale) +maybe_notify (CcRegionPage *self, + int category, + const gchar *target_locale) { MaybeNotifyData *mnd; @@ -227,13 +236,13 @@ maybe_notify (CcRegionPanel *self, g_variant_new ("(i)", category), G_DBUS_CALL_FLAGS_NONE, -1, - cc_panel_get_cancellable (CC_PANEL (self)), + self->cancellable, maybe_notify_finish, mnd); } static void -set_localed_locale (CcRegionPanel *self) +set_localed_locale (CcRegionPage *self) { g_autoptr(GVariantBuilder) b = NULL; g_autofree gchar *lang_value = NULL; @@ -267,8 +276,8 @@ set_localed_locale (CcRegionPanel *self) } static void -set_system_language (CcRegionPanel *self, - const gchar *language) +set_system_language (CcRegionPage *self, + const gchar *language) { if (g_strcmp0 (language, self->system_language) == 0) return; @@ -280,7 +289,7 @@ set_system_language (CcRegionPanel *self, } static void -update_language (CcRegionPanel *self, +update_language (CcRegionPage *self, CcLocaleTarget target, const gchar *language) { @@ -301,8 +310,8 @@ update_language (CcRegionPanel *self, } static void -set_system_region (CcRegionPanel *self, - const gchar *region) +set_system_region (CcRegionPage *self, + const gchar *region) { if (g_strcmp0 (region, self->system_region) == 0) return; @@ -314,7 +323,7 @@ set_system_region (CcRegionPanel *self, } static void -update_region (CcRegionPanel *self, +update_region (CcRegionPage *self, CcLocaleTarget target, const gchar *region) { @@ -345,7 +354,7 @@ update_region (CcRegionPanel *self, } static void -language_response (CcRegionPanel *self, +language_response (CcRegionPage *self, gint response_id, CcLanguageChooser *chooser) { @@ -366,7 +375,7 @@ language_response (CcRegionPanel *self, } static const gchar * -get_effective_language (CcRegionPanel *self, +get_effective_language (CcRegionPage *self, CcLocaleTarget target) { switch (target) { @@ -380,24 +389,26 @@ get_effective_language (CcRegionPanel *self, } static void -show_language_chooser (CcRegionPanel *self, +show_language_chooser (CcRegionPage *self, CcLocaleTarget target) { CcLanguageChooser *chooser; - CcShell *shell; + GtkNative *native; - shell = cc_panel_get_shell (CC_PANEL (self)); chooser = cc_language_chooser_new (); - gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (cc_shell_get_toplevel (shell))); cc_language_chooser_set_language (chooser, get_effective_language (self, target)); g_object_set_data (G_OBJECT (chooser), "target", GINT_TO_POINTER (target)); g_signal_connect_object (chooser, "response", G_CALLBACK (language_response), self, G_CONNECT_SWAPPED); + + native = gtk_widget_get_native (GTK_WIDGET (self)); + gtk_window_set_transient_for (GTK_WINDOW (chooser), + GTK_WINDOW (native)); gtk_window_present (GTK_WINDOW (chooser)); } static const gchar * -get_effective_region (CcRegionPanel *self, +get_effective_region (CcRegionPage *self, CcLocaleTarget target) { const gchar *region = NULL; @@ -422,7 +433,7 @@ get_effective_region (CcRegionPanel *self, } static void -format_response (CcRegionPanel *self, +format_response (CcRegionPage *self, gint response_id, CcFormatChooser *chooser) { @@ -441,19 +452,21 @@ format_response (CcRegionPanel *self, } static void -show_region_chooser (CcRegionPanel *self, +show_region_chooser (CcRegionPage *self, CcLocaleTarget target) { CcFormatChooser *chooser; - CcShell *shell; + GtkNative *native; - shell = cc_panel_get_shell (CC_PANEL (self)); chooser = cc_format_chooser_new (); - gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (cc_shell_get_toplevel (shell))); cc_format_chooser_set_region (chooser, get_effective_region (self, target)); g_object_set_data (G_OBJECT (chooser), "target", GINT_TO_POINTER (target)); g_signal_connect_object (chooser, "response", G_CALLBACK (format_response), self, G_CONNECT_SWAPPED); + + native = gtk_widget_get_native (GTK_WIDGET (self)); + gtk_window_set_transient_for (GTK_WINDOW (chooser), + GTK_WINDOW (native)); gtk_window_present (GTK_WINDOW (chooser)); } @@ -474,7 +487,7 @@ permission_acquired (GPermission *permission, GAsyncResult *res, const gchar *ac static void choose_language_permission_cb (GObject *source, GAsyncResult *res, gpointer user_data) { - CcRegionPanel *self = user_data; + CcRegionPage *self = user_data; if (permission_acquired (G_PERMISSION (source), res, "choose language")) show_language_chooser (self, SYSTEM); } @@ -482,13 +495,13 @@ choose_language_permission_cb (GObject *source, GAsyncResult *res, gpointer user static void choose_region_permission_cb (GObject *source, GAsyncResult *res, gpointer user_data) { - CcRegionPanel *self = user_data; + CcRegionPage *self = user_data; if (permission_acquired (G_PERMISSION (source), res, "choose region")) show_region_chooser (self, SYSTEM); } static void -update_user_region_row (CcRegionPanel *self) +update_user_region_row (CcRegionPage *self) { const gchar *region = get_effective_region (self, USER); g_autofree gchar *name = NULL; @@ -503,7 +516,7 @@ update_user_region_row (CcRegionPanel *self) } static void -update_user_language_row (CcRegionPanel *self) +update_user_language_row (CcRegionPage *self) { g_autofree gchar *name = NULL; @@ -520,7 +533,7 @@ update_user_language_row (CcRegionPanel *self) } static void -update_language_from_user (CcRegionPanel *self) +update_language_from_user (CcRegionPage *self) { const gchar *language = NULL; @@ -536,7 +549,7 @@ update_language_from_user (CcRegionPanel *self) } static void -update_region_from_setting (CcRegionPanel *self) +update_region_from_setting (CcRegionPage *self) { g_free (self->region); self->region = g_settings_get_string (self->locale_settings, KEY_REGION); @@ -544,7 +557,7 @@ update_region_from_setting (CcRegionPanel *self) } static void -setup_language_section (CcRegionPanel *self) +setup_language_section (CcRegionPage *self) { self->user = act_user_manager_get_user_by_id (self->user_manager, getuid ()); g_signal_connect_object (self->user, "notify::language", @@ -561,7 +574,7 @@ setup_language_section (CcRegionPanel *self) } static void -update_login_region (CcRegionPanel *self) +update_login_region (CcRegionPage *self) { g_autofree gchar *name = NULL; @@ -577,7 +590,7 @@ update_login_region (CcRegionPanel *self) } static void -update_login_language (CcRegionPanel *self) +update_login_language (CcRegionPage *self) { g_autofree gchar *name = NULL; @@ -592,7 +605,7 @@ update_login_language (CcRegionPanel *self) } static void -set_login_button_visibility (CcRegionPanel *self) +set_login_button_visibility (CcRegionPage *self) { gboolean has_multiple_users; gboolean loaded; @@ -612,10 +625,10 @@ set_login_button_visibility (CcRegionPanel *self) /* Callbacks */ static void -on_localed_properties_changed (GDBusProxy *localed_proxy, - GVariant *changed_properties, - const gchar **invalidated_properties, - CcRegionPanel *self) +on_localed_properties_changed (GDBusProxy *localed_proxy, + GVariant *changed_properties, + const gchar **invalidated_properties, + CcRegionPage *self) { g_autoptr(GVariant) v = NULL; @@ -658,7 +671,7 @@ localed_proxy_ready (GObject *source, GAsyncResult *res, gpointer data) { - CcRegionPanel *self = data; + CcRegionPage *self = data; GDBusProxy *proxy; g_autoptr(GError) error = NULL; @@ -682,7 +695,7 @@ localed_proxy_ready (GObject *source, } static void -setup_login_permission (CcRegionPanel *self) +setup_login_permission (CcRegionPage *self) { g_autoptr(GDBusConnection) bus = NULL; g_autoptr(GError) error = NULL; @@ -703,7 +716,7 @@ setup_login_permission (CcRegionPanel *self) "org.freedesktop.locale1", "/org/freedesktop/locale1", "org.freedesktop.locale1", - cc_panel_get_cancellable (CC_PANEL (self)), + self->cancellable, (GAsyncReadyCallback) localed_proxy_ready, self); @@ -725,7 +738,7 @@ session_proxy_ready (GObject *source, GAsyncResult *res, gpointer data) { - CcRegionPanel *self = data; + CcRegionPage *self = data; GDBusProxy *proxy; g_autoptr(GError) error = NULL; @@ -741,57 +754,49 @@ session_proxy_ready (GObject *source, } static void -on_login_formats_row_activated_cb (CcRegionPanel *self) +on_login_formats_row_activated_cb (CcRegionPage *self) { if (g_permission_get_allowed (self->permission)) { show_region_chooser (self, SYSTEM); } else if (g_permission_get_can_acquire (self->permission)) { g_permission_acquire_async (self->permission, - cc_panel_get_cancellable (CC_PANEL (self)), + self->cancellable, choose_region_permission_cb, self); } } static void -on_login_language_row_activated_cb (CcRegionPanel *self) +on_login_language_row_activated_cb (CcRegionPage *self) { if (g_permission_get_allowed (self->permission)) { show_language_chooser (self, SYSTEM); } else if (g_permission_get_can_acquire (self->permission)) { g_permission_acquire_async (self->permission, - cc_panel_get_cancellable (CC_PANEL (self)), + self->cancellable, choose_language_permission_cb, self); } } static void -on_user_formats_row_activated_cb (CcRegionPanel *self) +on_user_formats_row_activated_cb (CcRegionPage *self) { show_region_chooser (self, USER); } static void -on_user_language_row_activated_cb (CcRegionPanel *self) +on_user_language_row_activated_cb (CcRegionPage *self) { show_language_chooser (self, USER); } -/* CcPanel overrides */ - -static const char * -cc_region_panel_get_help_uri (CcPanel *panel) -{ - return "help:gnome-help/prefs-language"; -} - /* GObject overrides */ static void -cc_region_panel_finalize (GObject *object) +cc_region_page_finalize (GObject *object) { - CcRegionPanel *self = CC_REGION_PANEL (object); + CcRegionPage *self = CC_REGION_PAGE (object); GtkWidget *chooser; if (self->user_manager) { @@ -817,30 +822,30 @@ cc_region_panel_finalize (GObject *object) if (chooser) gtk_window_destroy (GTK_WINDOW (chooser)); - G_OBJECT_CLASS (cc_region_panel_parent_class)->finalize (object); + g_cancellable_cancel (self->cancellable); + g_clear_object (&self->cancellable); + + G_OBJECT_CLASS (cc_region_page_parent_class)->finalize (object); } static void -cc_region_panel_class_init (CcRegionPanelClass * klass) +cc_region_page_class_init (CcRegionPageClass * klass) { GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GObjectClass *object_class = G_OBJECT_CLASS (klass); - CcPanelClass *panel_class = CC_PANEL_CLASS (klass); - - panel_class->get_help_uri = cc_region_panel_get_help_uri; - object_class->finalize = cc_region_panel_finalize; + object_class->finalize = cc_region_page_finalize; g_type_ensure (CC_TYPE_LIST_ROW); - gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/region/cc-region-panel.ui"); + gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/system/region/cc-region-page.ui"); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, formats_row); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, banner); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, login_formats_row); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, login_group); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, login_language_row); - gtk_widget_class_bind_template_child (widget_class, CcRegionPanel, language_row); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, formats_row); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, banner); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, login_formats_row); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, login_group); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, login_language_row); + gtk_widget_class_bind_template_child (widget_class, CcRegionPage, language_row); gtk_widget_class_bind_template_callback (widget_class, on_login_formats_row_activated_cb); gtk_widget_class_bind_template_callback (widget_class, on_login_language_row_activated_cb); @@ -850,14 +855,14 @@ cc_region_panel_class_init (CcRegionPanelClass * klass) } static void -cc_region_panel_init (CcRegionPanel *self) +cc_region_page_init (CcRegionPage *self) { g_autoptr(GFile) needs_restart_file = NULL; - g_resources_register (cc_region_get_resource ()); - gtk_widget_init_template (GTK_WIDGET (self)); + self->cancellable = g_cancellable_new (); + self->user_manager = act_user_manager_get_default (); g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, @@ -866,7 +871,7 @@ cc_region_panel_init (CcRegionPanel *self) "org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager", - cc_panel_get_cancellable (CC_PANEL (self)), + self->cancellable, session_proxy_ready, self); diff --git a/panels/region/cc-region-panel.h b/panels/system/region/cc-region-page.h similarity index 72% rename from panels/region/cc-region-panel.h rename to panels/system/region/cc-region-page.h index c0c8dacdee..e12398467b 100644 --- a/panels/region/cc-region-panel.h +++ b/panels/system/region/cc-region-page.h @@ -1,4 +1,6 @@ /* + * cc-region-page.h + * * Copyright (C) 2010 Intel, Inc * * This program is free software; you can redistribute it and/or modify @@ -14,17 +16,20 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see . * - * Author: Sergey Udaltsov - * + * Authors: + * Sergey Udaltsov + * Gotam Gorabh */ #pragma once -#include + +#include G_BEGIN_DECLS -#define CC_TYPE_REGION_PANEL (cc_region_panel_get_type ()) -G_DECLARE_FINAL_TYPE (CcRegionPanel, cc_region_panel, CC, REGION_PANEL, CcPanel) +#define CC_TYPE_REGION_PAGE (cc_region_page_get_type ()) + +G_DECLARE_FINAL_TYPE (CcRegionPage, cc_region_page, CC, REGION_PAGE, AdwNavigationPage) G_END_DECLS diff --git a/panels/region/cc-region-panel.ui b/panels/system/region/cc-region-page.ui similarity index 87% rename from panels/region/cc-region-panel.ui rename to panels/system/region/cc-region-page.ui index c17e9d038b..4aab773447 100644 --- a/panels/region/cc-region-panel.ui +++ b/panels/system/region/cc-region-page.ui @@ -1,6 +1,9 @@ -