summaryrefslogtreecommitdiff
path: root/panels
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2022-01-20 15:11:48 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2022-01-20 17:24:25 -0300
commit28212c77a74afdffd64843423d58deb9b34dad7a (patch)
tree8d93b6b5e4784d2c6d201ec9ce3014d61951d2a1 /panels
parente1088495d078853e8e5b2540deca5ffd73a44fa6 (diff)
downloadgnome-control-center-28212c77a74afdffd64843423d58deb9b34dad7a.tar.gz
applications: Move handlers section into a dialog
Add a new row in the usage section, like Built-in and Disk Usage. Move the file handler widgetry into this new dialog.
Diffstat (limited to 'panels')
-rw-r--r--panels/applications/cc-applications-panel.c55
-rw-r--r--panels/applications/cc-applications-panel.ui88
2 files changed, 110 insertions, 33 deletions
diff --git a/panels/applications/cc-applications-panel.c b/panels/applications/cc-applications-panel.c
index e11166424..94830fc8a 100644
--- a/panels/applications/cc-applications-panel.c
+++ b/panels/applications/cc-applications-panel.c
@@ -116,9 +116,11 @@ struct _CcApplicationsPanel
CcToggleRow *search;
CcInfoRow *no_search;
- GtkWidget *handler_section;
GtkButton *handler_reset;
+ GtkDialog *handler_dialog;
GtkListBox *handler_list;
+ CcInfoRow *handler_row;
+ GtkLabel *handler_title_label;
CcInfoRow *hypertext;
CcInfoRow *text;
CcInfoRow *images;
@@ -1326,7 +1328,7 @@ static void
add_handler_row (CcApplicationsPanel *self,
const gchar *type)
{
- gtk_widget_show (self->handler_section);
+ gtk_widget_show (GTK_WIDGET (self->handler_row));
if (g_content_type_is_a (type, "x-scheme-handler/*"))
add_link_type (self, type);
@@ -1425,11 +1427,13 @@ handler_reset_cb (CcApplicationsPanel *self)
}
static void
-update_handler_sections (CcApplicationsPanel *self,
- GAppInfo *info)
+update_handler_dialog (CcApplicationsPanel *self,
+ GAppInfo *info)
{
+ g_autofree gchar *header_title = NULL;
g_autoptr(GHashTable) hash = NULL;
const gchar **types;
+ guint n_associations = 0;
gint i;
listbox_remove_all (self->handler_list);
@@ -1445,8 +1449,7 @@ update_handler_sections (CcApplicationsPanel *self,
self->other = NULL;
self->link = NULL;
- gtk_widget_hide (self->handler_section);
-
+ gtk_widget_hide (GTK_WIDGET (self->handler_row));
types = g_app_info_get_supported_types (info);
if (types == NULL || types[0] == NULL)
return;
@@ -1469,7 +1472,25 @@ update_handler_sections (CcApplicationsPanel *self,
add_handler_row (self, ctype);
g_hash_table_add (hash, g_steal_pointer (&ctype));
+
+ n_associations++;
}
+
+ if (n_associations > 0)
+ {
+ g_autofree gchar *subtitle = NULL;
+
+ subtitle = g_strdup_printf (g_dngettext (GETTEXT_PACKAGE,
+ "%u file and link type that is opened by the app",
+ "%u file and link types that are opened by the app",
+ n_associations),
+ n_associations);
+ adw_action_row_set_subtitle (ADW_ACTION_ROW (self->handler_row), subtitle);
+ }
+
+ header_title = g_strdup_printf (_("<b>%s</b> is used to open the following types of files and links."),
+ g_app_info_get_display_name (info));
+ gtk_label_set_markup (self->handler_title_label, header_title);
}
/* --- usage section --- */
@@ -1486,6 +1507,17 @@ on_builtin_row_activated_cb (GtkListBoxRow *row,
}
static void
+on_handler_row_activated_cb (GtkListBoxRow *row,
+ CcApplicationsPanel *self)
+{
+ CcShell *shell = cc_panel_get_shell (CC_PANEL (self));
+
+ gtk_window_set_transient_for (GTK_WINDOW (self->handler_dialog),
+ GTK_WINDOW (cc_shell_get_toplevel (shell)));
+ gtk_window_present (GTK_WINDOW (self->handler_dialog));
+}
+
+static void
on_storage_row_activated_cb (GtkListBoxRow *row,
CcApplicationsPanel *self)
{
@@ -1690,7 +1722,7 @@ update_panel (CcApplicationsPanel *self,
update_header_section (self, info);
update_permission_section (self, info);
update_integration_section (self, info);
- update_handler_sections (self, info);
+ update_handler_dialog (self, info);
update_usage_section (self, info);
g_set_object (&self->current_app_info, info);
@@ -2019,9 +2051,11 @@ cc_applications_panel_class_init (CcApplicationsPanelClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, clear_cache_button);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, data);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, empty_box);
- gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_section);
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_dialog);
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_row);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_reset);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_list);
+ gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, handler_title_label);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, header_title);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, install_button);
gtk_widget_class_bind_template_child (widget_class, CcApplicationsPanel, integration_section);
@@ -2068,12 +2102,13 @@ cc_applications_panel_class_init (CcApplicationsPanelClass *klass)
gtk_widget_class_bind_template_callback (widget_class, open_software_cb);
gtk_widget_class_bind_template_callback (widget_class, handler_reset_cb);
gtk_widget_class_bind_template_callback (widget_class, on_builtin_row_activated_cb);
+ gtk_widget_class_bind_template_callback (widget_class, on_handler_row_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, on_launch_button_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, on_sidebar_search_entry_activated_cb);
gtk_widget_class_bind_template_callback (widget_class, on_sidebar_search_entry_search_changed_cb);
gtk_widget_class_bind_template_callback (widget_class, on_sidebar_search_entry_search_stopped_cb);
- gtk_widget_class_bind_template_callback (widget_class, on_storage_row_activated_cb);
-}
+
+ gtk_widget_class_bind_template_callback (widget_class, on_storage_row_activated_cb);}
static void
cc_applications_panel_init (CcApplicationsPanel *self)
diff --git a/panels/applications/cc-applications-panel.ui b/panels/applications/cc-applications-panel.ui
index 8015bca47..40e55fcf1 100644
--- a/panels/applications/cc-applications-panel.ui
+++ b/panels/applications/cc-applications-panel.ui
@@ -222,29 +222,6 @@
</child>
<child>
- <object class="AdwPreferencesGroup" id="handler_section">
- <child>
- <object class="GtkListBox" id="handler_list">
- <property name="selection-mode">none</property>
- <signal name="row-activated" handler="handler_row_activated_cb" object="CcApplicationsPanel" swapped="yes"/>
- <style>
- <class name="boxed-list"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="handler_reset">
- <property name="halign">end</property>
- <property name="valign">center</property>
- <property name="margin-top">12</property>
- <property name="label" translatable="yes">Reset</property>
- <signal name="clicked" handler="handler_reset_cb" object="CcApplicationsPanel" swapped="yes"/>
- </object>
- </child>
- </object>
- </child>
-
- <child>
<object class="AdwPreferencesGroup" id="usage_section">
<child>
<object class="CcInfoRow" id="builtin">
@@ -256,6 +233,14 @@
</object>
</child>
<child>
+ <object class="CcInfoRow" id="handler_row">
+ <property name="title" translatable="yes">File &amp;amp; Link Associations</property>
+ <property name="has-expander">True</property>
+ <property name="is-link">True</property>
+ <signal name="activated" handler="on_handler_row_activated_cb" object="CcApplicationsPanel" swapped="no" />
+ </object>
+ </child>
+ <child>
<object class="CcInfoRow" id="storage">
<property name="title" translatable="yes">Storage</property>
<property name="has-expander">1</property>
@@ -377,6 +362,63 @@
</child>
</object>
+ <!-- File & Link handlers dialog -->
+ <object class="GtkDialog" id="handler_dialog">
+ <property name="title" translatable="yes">File &amp; Link Associations</property>
+ <property name="modal">1</property>
+ <property name="use-header-bar">1</property>
+ <property name="resizable">0</property>
+ <property name="hide-on-close">True</property>
+ <property name="default-width">500</property>
+ <property name="default-height">400</property>
+ <child>
+ <object class="AdwPreferencesPage">
+
+ <child>
+ <object class="AdwPreferencesGroup">
+ <child>
+ <object class="GtkLabel" id="handler_title_label">
+ <property name="wrap">True</property>
+ <property name="xalign">0.0</property>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwPreferencesGroup" id="handler_section">
+ <child>
+ <object class="GtkListBox" id="handler_list">
+ <property name="selection-mode">none</property>
+ <signal name="row-activated" handler="handler_row_activated_cb" object="CcApplicationsPanel" swapped="yes"/>
+ <style>
+ <class name="boxed-list"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ <child>
+ <object class="AdwPreferencesGroup">
+ <child>
+ <object class="GtkButton" id="handler_reset">
+ <property name="valign">center</property>
+ <property name="margin-top">12</property>
+ <property name="label" translatable="yes">Reset</property>
+ <signal name="clicked" handler="handler_reset_cb" object="CcApplicationsPanel" swapped="yes"/>
+ <style>
+ <class name="destructive-action" />
+ </style>
+ </object>
+ </child>
+ </object>
+ </child>
+
+ </object>
+ </child>
+ </object>
+
<!-- Storage dialog -->
<object class="GtkDialog" id="storage_dialog">
<property name="title" translatable="yes">Storage</property>