summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorey Berla <corey@berla.me>2023-01-02 17:10:08 -0800
committerCorey Berla <corey@berla.me>2023-05-04 21:32:59 +0000
commit4346087adc4057aae9a84c18cdfd87db2aafdac0 (patch)
treee8427d91141580eabf49a5b47d4aaf99effdbd95
parent7c5f51739adc1c0abf60e1ac88f9cf9c4ce1aa97 (diff)
downloadnautilus-4346087adc4057aae9a84c18cdfd87db2aafdac0.tar.gz
column-chooser: Subclass AdwWindow instead of GtkBox
We were subclassing from GtkBox and then, list-view created a list-view-column-editor which subclassed from AdwWindow to add the column-chooser. It's a lot of extra code / complexity for something that is only used in list-view. This also allows us to directly use column-chooser within list-view. Also drop the list description label, in preparation for the switch to GtkListBox.
-rw-r--r--po/POTFILES.in1
-rw-r--r--src/nautilus-column-chooser.c12
-rw-r--r--src/nautilus-column-chooser.h8
-rw-r--r--src/nautilus-list-view.c24
-rw-r--r--src/resources/nautilus.gresource.xml1
-rw-r--r--src/resources/ui/nautilus-column-chooser.ui174
-rw-r--r--src/resources/ui/nautilus-list-view-column-editor.ui41
7 files changed, 118 insertions, 143 deletions
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 0adfd1c0f..d3db01506 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -76,7 +76,6 @@ src/resources/ui/nautilus-files-view-select-items.ui
src/resources/ui/nautilus-files-view.ui
src/resources/ui/nautilus-grid-cell.ui
src/resources/ui/nautilus-history-controls.ui
-src/resources/ui/nautilus-list-view-column-editor.ui
src/resources/ui/nautilus-name-cell.ui
src/resources/ui/nautilus-operations-ui-manager-request-passphrase.ui
src/resources/ui/nautilus-pathbar-context-menu.ui
diff --git a/src/nautilus-column-chooser.c b/src/nautilus-column-chooser.c
index de68338ec..ddc2d9bcd 100644
--- a/src/nautilus-column-chooser.c
+++ b/src/nautilus-column-chooser.c
@@ -32,7 +32,7 @@
struct _NautilusColumnChooser
{
- GtkBox parent;
+ AdwWindow parent;
GtkWidget *view;
GtkListStore *store;
@@ -40,6 +40,7 @@ struct _NautilusColumnChooser
GtkWidget *move_up_button;
GtkWidget *move_down_button;
GtkWidget *use_default_button;
+ GtkWidget *window_title;
NautilusFile *file;
};
@@ -67,7 +68,7 @@ enum
};
static guint signals[LAST_SIGNAL];
-G_DEFINE_TYPE (NautilusColumnChooser, nautilus_column_chooser, GTK_TYPE_BOX);
+G_DEFINE_TYPE (NautilusColumnChooser, nautilus_column_chooser, ADW_TYPE_WINDOW);
static void
nautilus_column_chooser_set_property (GObject *object,
@@ -333,10 +334,14 @@ static void
nautilus_column_chooser_constructed (GObject *object)
{
NautilusColumnChooser *chooser;
+ g_autofree gchar *name = NULL;
G_OBJECT_CLASS (nautilus_column_chooser_parent_class)->constructed (object);
chooser = NAUTILUS_COLUMN_CHOOSER (object);
+ name = nautilus_file_get_display_name (chooser->file);
+
+ adw_window_title_set_subtitle (ADW_WINDOW_TITLE (chooser->window_title), name);
populate_tree (chooser);
@@ -553,6 +558,7 @@ nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class)
gtk_widget_class_bind_template_child (widget_class, NautilusColumnChooser, move_up_button);
gtk_widget_class_bind_template_child (widget_class, NautilusColumnChooser, move_down_button);
gtk_widget_class_bind_template_child (widget_class, NautilusColumnChooser, use_default_button);
+ gtk_widget_class_bind_template_child (widget_class, NautilusColumnChooser, window_title);
gtk_widget_class_bind_template_callback (widget_class, view_row_activated_callback);
gtk_widget_class_bind_template_callback (widget_class, selection_changed_callback);
gtk_widget_class_bind_template_callback (widget_class, visible_toggled_callback);
@@ -560,6 +566,8 @@ nautilus_column_chooser_class_init (NautilusColumnChooserClass *chooser_class)
gtk_widget_class_bind_template_callback (widget_class, move_down_clicked_callback);
gtk_widget_class_bind_template_callback (widget_class, use_default_clicked_callback);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_Escape, 0, "window.close", NULL);
+
signals[CHANGED] = g_signal_new
("changed",
G_TYPE_FROM_CLASS (chooser_class),
diff --git a/src/nautilus-column-chooser.h b/src/nautilus-column-chooser.h
index c52efe4c6..93581f5d4 100644
--- a/src/nautilus-column-chooser.h
+++ b/src/nautilus-column-chooser.h
@@ -25,14 +25,16 @@
#include <gtk/gtk.h>
#include "nautilus-file.h"
+#include <libadwaita-1/adwaita.h>
+
#define NAUTILUS_TYPE_COLUMN_CHOOSER nautilus_column_chooser_get_type()
-G_DECLARE_FINAL_TYPE (NautilusColumnChooser, nautilus_column_chooser, NAUTILUS, COLUMN_CHOOSER, GtkBox);
+G_DECLARE_FINAL_TYPE (NautilusColumnChooser, nautilus_column_chooser, NAUTILUS, COLUMN_CHOOSER, AdwWindow);
-GtkWidget *nautilus_column_chooser_new (NautilusFile *file);
+GtkWidget *nautilus_column_chooser_new (NautilusFile *file);
void nautilus_column_chooser_set_settings (NautilusColumnChooser *chooser,
char **visible_columns,
char **column_order);
-void nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser,
+void nautilus_column_chooser_get_settings (NautilusColumnChooser *chooser,
char ***visible_columns,
char ***column_order);
diff --git a/src/nautilus-list-view.c b/src/nautilus-list-view.c
index 15202622f..3b5f250ef 100644
--- a/src/nautilus-list-view.c
+++ b/src/nautilus-list-view.c
@@ -542,31 +542,13 @@ column_chooser_use_default_callback (NautilusColumnChooser *chooser,
static GtkWidget *
create_column_editor (NautilusListView *view)
{
- g_autoptr (GtkBuilder) builder = NULL;
- GtkWidget *window;
- AdwWindowTitle *window_title;
- GtkWidget *box;
GtkWidget *column_chooser;
NautilusFile *file;
- char *name;
-
- builder = gtk_builder_new_from_resource ("/org/gnome/nautilus/ui/nautilus-list-view-column-editor.ui");
-
- window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
- gtk_window_set_transient_for (GTK_WINDOW (window),
- GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (view))));
file = nautilus_files_view_get_directory_as_file (NAUTILUS_FILES_VIEW (view));
- name = nautilus_file_get_display_name (file);
- window_title = ADW_WINDOW_TITLE (gtk_builder_get_object (builder, "window_title"));
- adw_window_title_set_subtitle (window_title, name);
- g_free (name);
-
- box = GTK_WIDGET (gtk_builder_get_object (builder, "box"));
-
column_chooser = nautilus_column_chooser_new (file);
- gtk_widget_set_vexpand (column_chooser, TRUE);
- gtk_box_append (GTK_BOX (box), column_chooser);
+ gtk_window_set_transient_for (GTK_WINDOW (column_chooser),
+ GTK_WINDOW (gtk_widget_get_root (GTK_WIDGET (view))));
g_signal_connect (column_chooser, "changed",
G_CALLBACK (column_chooser_changed_callback),
@@ -578,7 +560,7 @@ create_column_editor (NautilusListView *view)
column_chooser_set_from_settings
(NAUTILUS_COLUMN_CHOOSER (column_chooser), view);
- return window;
+ return column_chooser;
}
static void
diff --git a/src/resources/nautilus.gresource.xml b/src/resources/nautilus.gresource.xml
index 87eb657e5..f1e9b41e2 100644
--- a/src/resources/nautilus.gresource.xml
+++ b/src/resources/nautilus.gresource.xml
@@ -11,7 +11,6 @@
<file>ui/nautilus-view-controls.ui</file>
<file>ui/nautilus-toolbar-view-menu.ui</file>
<file>ui/nautilus-column-chooser.ui</file>
- <file>ui/nautilus-list-view-column-editor.ui</file>
<file>ui/nautilus-create-folder-dialog.ui</file>
<file>ui/nautilus-compress-dialog.ui</file>
<file>ui/nautilus-rename-file-popover.ui</file>
diff --git a/src/resources/ui/nautilus-column-chooser.ui b/src/resources/ui/nautilus-column-chooser.ui
index 24cce3de7..512117c1c 100644
--- a/src/resources/ui/nautilus-column-chooser.ui
+++ b/src/resources/ui/nautilus-column-chooser.ui
@@ -13,93 +13,119 @@
<column type="gboolean"/>
</columns>
</object>
- <template class="NautilusColumnChooser" parent="GtkBox">
- <property name="orientation">vertical</property>
- <property name="spacing">12</property>
- <child>
- <object class="GtkScrolledWindow">
- <property name="child">
- <object class="GtkTreeView" id="view">
- <property name="vexpand">True</property>
- <property name="model">store</property>
- <property name="headers-visible">False</property>
- <property name="reorderable">True</property>
- <signal name="row-activated" handler="view_row_activated_callback" swapped="no"/>
- <child internal-child="selection">
- <object class="GtkTreeSelection">
- <signal name="changed" handler="selection_changed_callback" swapped="no"/>
+ <template class="NautilusColumnChooser" parent="AdwWindow">
+ <property name="modal">True</property>
+ <property name="default-width">360</property>
+ <property name="default-height">480</property>
+ <property name="destroy-with-parent">True</property>
+ <property name="content">
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkHeaderBar">
+ <child type="title">
+ <object class="AdwWindowTitle" id="window_title">
+ <property name="title" translatable="true">Visible Columns</property>
</object>
</child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="box">
+ <property name="margin-top">18</property>
+ <property name="margin-bottom">18</property>
+ <property name="margin-start">18</property>
+ <property name="margin-end">18</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
<child>
- <object class="GtkTreeViewColumn" id="visible-column">
- <child>
- <object class="GtkCellRendererToggle">
- <signal name="toggled" handler="visible_toggled_callback" swapped="no"/>
+ <object class="GtkScrolledWindow">
+ <property name="child">
+ <object class="GtkTreeView" id="view">
+ <property name="vexpand">True</property>
+ <property name="model">store</property>
+ <property name="headers-visible">False</property>
+ <property name="reorderable">True</property>
+ <signal name="row-activated" handler="view_row_activated_callback" swapped="no"/>
+ <child internal-child="selection">
+ <object class="GtkTreeSelection">
+ <signal name="changed" handler="selection_changed_callback" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="visible-column">
+ <child>
+ <object class="GtkCellRendererToggle">
+ <signal name="toggled" handler="visible_toggled_callback" swapped="no"/>
+ </object>
+ <attributes>
+ <attribute name="sensitive">3</attribute>
+ <attribute name="active">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkTreeViewColumn" id="label-column">
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="sensitive">3</attribute>
+ <attribute name="text">1</attribute>
+ </attributes>
+ </child>
+ </object>
+ </child>
</object>
- <attributes>
- <attribute name="sensitive">3</attribute>
- <attribute name="active">0</attribute>
- </attributes>
- </child>
+ </property>
+ <style>
+ <class name="frame"/>
+ </style>
</object>
</child>
<child>
- <object class="GtkTreeViewColumn" id="label-column">
+ <object class="GtkBox">
+ <property name="spacing">12</property>
<child>
- <object class="GtkCellRendererText"/>
- <attributes>
- <attribute name="sensitive">3</attribute>
- <attribute name="text">1</attribute>
- </attributes>
+ <object class="GtkBox">
+ <child>
+ <object class="GtkButton" id="move_up_button">
+ <property name="sensitive">False</property>
+ <property name="icon-name">go-up-symbolic</property>
+ <signal name="clicked" handler="move_up_clicked_callback" swapped="no"/>
+ </object>
+ </child>
+ <child>
+ <object class="GtkButton" id="move_down_button">
+ <property name="sensitive">False</property>
+ <property name="icon-name">go-down-symbolic</property>
+ <signal name="clicked" handler="move_down_clicked_callback" swapped="no"/>
+ </object>
+ </child>
+ <style>
+ <class name="linked"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <child>
+ <object class="GtkButton" id="use_default_button">
+ <property name="hexpand">true</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Reset to De_fault</property>
+ <property name="tooltip-text" translatable="yes">Replace the current List Columns settings with the default settings</property>
+ <property name="use-underline">True</property>
+ <signal name="clicked" handler="use_default_clicked_callback" swapped="no"/>
+ </object>
+ </child>
+ </object>
</child>
- </object>
- </child>
- </object>
- </property>
- <style>
- <class name="frame"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <property name="spacing">12</property>
- <child>
- <object class="GtkBox">
- <child>
- <object class="GtkButton" id="move_up_button">
- <property name="sensitive">False</property>
- <property name="icon-name">go-up-symbolic</property>
- <signal name="clicked" handler="move_up_clicked_callback" swapped="no"/>
- </object>
- </child>
- <child>
- <object class="GtkButton" id="move_down_button">
- <property name="sensitive">False</property>
- <property name="icon-name">go-down-symbolic</property>
- <signal name="clicked" handler="move_down_clicked_callback" swapped="no"/>
- </object>
- </child>
- <style>
- <class name="linked"/>
- </style>
- </object>
- </child>
- <child>
- <object class="GtkBox">
- <child>
- <object class="GtkButton" id="use_default_button">
- <property name="hexpand">true</property>
- <property name="halign">end</property>
- <property name="label" translatable="yes">Reset to De_fault</property>
- <property name="tooltip-text" translatable="yes">Replace the current List Columns settings with the default settings</property>
- <property name="use-underline">True</property>
- <signal name="clicked" handler="use_default_clicked_callback" swapped="no"/>
</object>
</child>
</object>
</child>
</object>
- </child>
+ </property>
</template>
</interface>
diff --git a/src/resources/ui/nautilus-list-view-column-editor.ui b/src/resources/ui/nautilus-list-view-column-editor.ui
deleted file mode 100644
index c4cab589e..000000000
--- a/src/resources/ui/nautilus-list-view-column-editor.ui
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<interface>
- <requires lib="gtk" version="4.0"/>
- <object class="AdwWindow" id="window">
- <property name="modal">True</property>
- <property name="default-width">360</property>
- <property name="default-height">440</property>
- <child>
- <object class="GtkBox">
- <property name="orientation">vertical</property>
- <child>
- <object class="AdwHeaderBar">
- <child type="title">
- <object class="AdwWindowTitle" id="window_title">
- <property name="title" translatable="true">Visible Columns</property>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkBox" id="box">
- <property name="margin-top">18</property>
- <property name="margin-bottom">18</property>
- <property name="margin-start">18</property>
- <property name="margin-end">18</property>
- <property name="orientation">vertical</property>
- <property name="spacing">18</property>
- <child>
- <object class="GtkLabel">
- <property name="label" translatable="yes">Choose the order of information to appear in this folder:</property>
- <property name="xalign">0</property>
- <property name="yalign">0</property>
- <property name="wrap">True</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
-</interface>