[gtk/treeview-sort-arrows] treeviewcolumn: Redo sort arrows
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/treeview-sort-arrows] treeviewcolumn: Redo sort arrows
- Date: Mon, 18 Jan 2021 23:07:58 +0000 (UTC)
commit e3abd624c2515aeac4efffaaf09b8192fe636738
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Jan 18 16:11:57 2021 -0500
treeviewcolumn: Redo sort arrows
Instead of hardcoding icon names in the widget,
use arrow:ascending and arrow:descending styles
and set the icon to use with -gtk-icon-source.
This lets themes change the icon thats used
here, without forcing all uses of pan-up/down-symbolic
to be treated the same.
Fixes: #3577
gtk/gtktreeviewcolumn.c | 43 +++++++++++++++++++-----------------------
gtk/theme/Adwaita/_common.scss | 11 +++++++++++
2 files changed, 30 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gtktreeviewcolumn.c b/gtk/gtktreeviewcolumn.c
index e321bed4b6..b18ea4bb07 100644
--- a/gtk/gtktreeviewcolumn.c
+++ b/gtk/gtktreeviewcolumn.c
@@ -38,6 +38,7 @@
#include "gtkgesturedrag.h"
#include "gtkeventcontrollerfocus.h"
#include "gtkeventcontrollerkey.h"
+#include "gtkbuiltiniconprivate.h"
#include <string.h>
@@ -879,7 +880,7 @@ gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column)
gtk_widget_set_halign (priv->frame, GTK_ALIGN_START);
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2);
- priv->arrow = gtk_image_new_from_icon_name ("pan-down-symbolic");
+ priv->arrow = gtk_builtin_icon_new ("arrow");
if (priv->child)
child = priv->child;
@@ -905,7 +906,7 @@ gtk_tree_view_column_create_button (GtkTreeViewColumn *tree_column)
gtk_button_set_child (GTK_BUTTON (priv->button), hbox);
}
-static void
+static void
gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column)
{
GtkTreeViewColumnPrivate *priv = tree_column->priv;
@@ -914,7 +915,6 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column)
GtkWidget *frame;
GtkWidget *arrow;
GtkWidget *current_child;
- const char *icon_name = "missing-image";
GtkTreeModel *model;
if (priv->tree_view)
@@ -948,17 +948,17 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column)
g_return_if_fail (GTK_IS_LABEL (current_child));
if (priv->title)
- gtk_label_set_text_with_mnemonic (GTK_LABEL (current_child),
- priv->title);
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (current_child),
+ priv->title);
else
- gtk_label_set_text_with_mnemonic (GTK_LABEL (current_child),
- "");
+ gtk_label_set_text_with_mnemonic (GTK_LABEL (current_child),
+ "");
}
if (GTK_IS_TREE_SORTABLE (model))
gtk_tree_sortable_get_sort_column_id (GTK_TREE_SORTABLE (model),
- &sort_column_id,
- NULL);
+ &sort_column_id,
+ NULL);
if (priv->show_sort_indicator)
{
@@ -971,24 +971,19 @@ gtk_tree_view_column_update_button (GtkTreeViewColumn *tree_column)
else
alternative = FALSE;
- switch (priv->sort_order)
+ if ((!alternative && priv->sort_order == GTK_SORT_ASCENDING) ||
+ (alternative && priv->sort_order == GTK_SORT_DESCENDING))
{
- case GTK_SORT_ASCENDING:
- icon_name = alternative ? "pan-up-symbolic" : "pan-down-symbolic";
- break;
-
- case GTK_SORT_DESCENDING:
- icon_name = alternative ? "pan-down-symbolic" : "pan-up-symbolic";
- break;
-
- default:
- g_warning (G_STRLOC": bad sort order");
- break;
- }
+ gtk_widget_remove_css_class (arrow, "descending");
+ gtk_widget_add_css_class (arrow, "ascending");
+ }
+ else
+ {
+ gtk_widget_remove_css_class (arrow, "ascending");
+ gtk_widget_add_css_class (arrow, "descending");
+ }
}
- gtk_image_set_from_icon_name (GTK_IMAGE (arrow), icon_name);
-
/* Put arrow on the right if the text is left-or-center justified, and on the
* left otherwise; do this by packing boxes, so flipping text direction will
* reverse things
diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss
index b5094c68e6..3e02c97b63 100644
--- a/gtk/theme/Adwaita/_common.scss
+++ b/gtk/theme/Adwaita/_common.scss
@@ -1766,6 +1766,17 @@ treeview.view {
color: $fg_color;
transition: none; //I shouldn't need this
}
+ arrow {
+ &.ascending {
+ -gtk-icon-source: -gtk-icontheme('pan-up-symbolic');
+ }
+ &.descending {
+ -gtk-icon-source: -gtk-icontheme('pan-down-symbolic');
+ }
+
+ min-height: 16px;
+ min-width: 16px;
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]