aboutsummaryrefslogtreecommitdiff
path: root/fastiv-sidebar.c
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-11-20 20:55:24 +0100
committerPřemysl Eric Janouch <p@janouch.name>2021-11-20 22:02:02 +0100
commit8376ae9c4a6587cb664c353c1649fad666e1fbf2 (patch)
tree9006e1546f4f34aab4b203bf93033cdf2f08812d /fastiv-sidebar.c
parent5ebfebb8fc08c7b5fc7fee85afeca270d712ae13 (diff)
downloadfiv-8376ae9c4a6587cb664c353c1649fad666e1fbf2.tar.gz
fiv-8376ae9c4a6587cb664c353c1649fad666e1fbf2.tar.xz
fiv-8376ae9c4a6587cb664c353c1649fad666e1fbf2.zip
Add some custom action buttons to the sidebar
So far they're inactive, and do not do anything. Change the icon for the current directory to stand out.
Diffstat (limited to 'fastiv-sidebar.c')
-rw-r--r--fastiv-sidebar.c62
1 files changed, 50 insertions, 12 deletions
diff --git a/fastiv-sidebar.c b/fastiv-sidebar.c
index f15ecd3..5d78667 100644
--- a/fastiv-sidebar.c
+++ b/fastiv-sidebar.c
@@ -129,11 +129,10 @@ update_location(FastivSidebar *self, GFile *location)
create_row(parent, "go-up-symbolic"));
}
- // Another option would be "folder-open-symbolic",
- // "*-visiting-*" is mildly inappropriate (means: open in another window).
- // TODO(p): Try out "circle-filled-symbolic".
+ // Other options are "folder-{visiting,open}-symbolic", though the former
+ // is mildly inappropriate (means: open in another window).
gtk_container_add(GTK_CONTAINER(self->listbox),
- create_row(self->location, "folder-visiting-symbolic"));
+ create_row(self->location, "circle-filled-symbolic"));
GFileEnumerator *enumerator = g_file_enumerate_children(self->location,
G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME
@@ -339,25 +338,64 @@ fastiv_sidebar_init(FastivSidebar *self)
GTK_POLICY_NEVER, GTK_POLICY_NEVER);
// Fill up what would otherwise be wasted space,
- // as it is in the example of Nautilus and Thunar.
- GtkWidget *superbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
- gtk_container_add(
- GTK_CONTAINER(superbox), GTK_WIDGET(self->places));
- gtk_container_add(
- GTK_CONTAINER(superbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL));
+ // as it is in the examples of Nautilus and Thunar.
+ GtkWidget *plus = gtk_button_new_from_icon_name("zoom-in-symbolic",
+ GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_tooltip_text(plus, "Larger thumbnails");
+ GtkWidget *minus = gtk_button_new_from_icon_name("zoom-out-symbolic",
+ GTK_ICON_SIZE_BUTTON);
+ gtk_widget_set_tooltip_text(minus, "Smaller thumbnails");
+
+ GtkWidget *zoom_group = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
+ gtk_style_context_add_class(
+ gtk_widget_get_style_context(zoom_group), GTK_STYLE_CLASS_LINKED);
+ gtk_box_pack_start(GTK_BOX(zoom_group), plus, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(zoom_group), minus, FALSE, FALSE, 0);
+
+ GtkWidget *funnel = gtk_toggle_button_new();
+ gtk_container_add(GTK_CONTAINER(funnel),
+ gtk_image_new_from_icon_name("funnel-symbolic", GTK_ICON_SIZE_BUTTON));
+ gtk_widget_set_tooltip_text(funnel, "Hide unsupported files");
+
+ // None of GtkActionBar, GtkToolbar, .inline-toolbar is appropriate.
+ // It is either borders or padding.
+ GtkWidget *buttons = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 12);
+ gtk_style_context_add_class(
+ gtk_widget_get_style_context(buttons), GTK_STYLE_CLASS_TOOLBAR);
+ gtk_box_pack_start(GTK_BOX(buttons), zoom_group, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(buttons), funnel, FALSE, FALSE, 0);
+ gtk_widget_set_halign(buttons, GTK_ALIGN_CENTER);
+
+ // TODO(p): Implement. Probably fill `buttons` in externally.
+ gtk_widget_set_sensitive(plus, FALSE);
+ gtk_widget_set_sensitive(minus, FALSE);
+ gtk_widget_set_sensitive(funnel, FALSE);
self->listbox = gtk_list_box_new();
gtk_list_box_set_selection_mode(
GTK_LIST_BOX(self->listbox), GTK_SELECTION_NONE);
g_signal_connect(self->listbox, "row-activated",
G_CALLBACK(on_open_breadcrumb), self);
- gtk_container_add(GTK_CONTAINER(superbox), self->listbox);
+
+ GtkWidget *superbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ gtk_container_add(
+ GTK_CONTAINER(superbox), GTK_WIDGET(self->places));
+ gtk_container_add(
+ GTK_CONTAINER(superbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL));
+ gtk_container_add(
+ GTK_CONTAINER(superbox), buttons);
+ gtk_container_add(
+ GTK_CONTAINER(superbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL));
+ gtk_container_add(
+ GTK_CONTAINER(superbox), self->listbox);
+ gtk_container_add(GTK_CONTAINER(self), superbox);
gtk_scrolled_window_set_policy(
GTK_SCROLLED_WINDOW(self), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(self)),
GTK_STYLE_CLASS_SIDEBAR);
- gtk_container_add(GTK_CONTAINER(self), superbox);
+ gtk_style_context_add_class(gtk_widget_get_style_context(GTK_WIDGET(self)),
+ "fastiv");
}
// --- Public interface --------------------------------------------------------