[gnome-font-viewer] Redo the info dialog
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-font-viewer] Redo the info dialog
- Date: Tue, 23 Jan 2018 09:17:29 +0000 (UTC)
commit 38187c9407f0ccc32af6f34c2a64484a8a075738
Author: Matthias Clasen <mclasen redhat com>
Date: Thu Jan 18 22:54:51 2018 -0500
Redo the info dialog
Since it is hard to make a dialog work nicely for both large
amounts of information and small (compare Overpass to Carlito),
move the info into the main window. This works better, and
feels less fiddly than the dialog.
src/font-view.c | 73 +++++++++++++++++++++++++++++-------------------------
1 files changed, 39 insertions(+), 34 deletions(-)
---
diff --git a/src/font-view.c b/src/font-view.c
index 4ed5aa3..ed22261 100644
--- a/src/font-view.c
+++ b/src/font-view.c
@@ -60,6 +60,7 @@ typedef struct {
GtkWidget *stack;
GtkWidget *swin_view;
GtkWidget *swin_preview;
+ GtkWidget *swin_info;
GtkWidget *icon_view;
GtkWidget *search_bar;
GtkWidget *search_entry;
@@ -167,6 +168,8 @@ add_row (GtkWidget *grid,
gboolean multiline)
{
GtkWidget *name_w, *label;
+ int i;
+ const char *p;
name_w = gtk_label_new (name);
gtk_style_context_add_class (gtk_widget_get_style_context (name_w), "dim-label");
@@ -185,12 +188,24 @@ add_row (GtkWidget *grid,
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
gtk_label_set_max_width_chars (GTK_LABEL (label), 64);
+
if (multiline && g_utf8_strlen (value, -1) > 64) {
- gtk_label_set_width_chars (GTK_LABEL (label), 64);
+ gtk_label_set_width_chars (GTK_LABEL (label), 64);
+ gtk_label_set_lines (GTK_LABEL (label), 10);
+
+ p = value;
+ i = 0;
+ while (p) {
+ p = strchr (p + 1, '\n');
+ i++;
+ }
+ if (i > 3) { /* multi-paragraph text */
+ gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_NONE);
+ gtk_label_set_lines (GTK_LABEL (label), -1);
+ }
}
- gtk_label_set_lines (GTK_LABEL (label), multiline ? 10 : 1);
- gtk_grid_attach_next_to (GTK_GRID (grid), label,
+ gtk_grid_attach_next_to (GTK_GRID (grid), label,
name_w, GTK_POS_RIGHT,
1, 1);
}
@@ -689,26 +704,21 @@ info_button_clicked_cb (GtkButton *button,
gpointer user_data)
{
FontViewApplication *self = user_data;
- GtkWidget *stack, *switcher, *grid, *dialog;
+ GtkWidget *grid;
+ GtkWidget *child;
FT_Face face = sushi_font_widget_get_ft_face (SUSHI_FONT_WIDGET (self->font_widget));
- if (face == NULL)
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))) {
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "preview");
return;
+ }
- dialog = g_object_new (GTK_TYPE_DIALOG,
- "transient-for", self->main_window,
- "modal", TRUE,
- "resizable", FALSE,
- "destroy-with-parent", TRUE,
- "use-header-bar", TRUE,
- NULL);
- stack = gtk_stack_new ();
- gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), stack);
+ if (face == NULL)
+ return;
- switcher = gtk_stack_switcher_new ();
- gtk_stack_switcher_set_stack (GTK_STACK_SWITCHER (switcher), GTK_STACK (stack));
- gtk_header_bar_set_custom_title (GTK_HEADER_BAR (gtk_window_get_titlebar (GTK_WINDOW (dialog))),
- switcher);
+ child = gtk_bin_get_child (GTK_BIN (self->swin_info));
+ if (child)
+ gtk_widget_destroy (child);
grid = gtk_grid_new ();
gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
@@ -717,22 +727,11 @@ info_button_clicked_cb (GtkButton *button,
gtk_grid_set_row_spacing (GTK_GRID (grid), 2);
populate_grid (self, grid, face);
-
- gtk_stack_add_titled (GTK_STACK (stack), grid, "info", _("General"));
-
- grid = gtk_grid_new ();
- gtk_orientable_set_orientation (GTK_ORIENTABLE (grid), GTK_ORIENTATION_VERTICAL);
- g_object_set (grid, "margin", 20, NULL);
- gtk_grid_set_column_spacing (GTK_GRID (grid), 8);
- gtk_grid_set_row_spacing (GTK_GRID (grid), 2);
-
populate_details (self, grid, face);
+ gtk_container_add (GTK_CONTAINER (self->swin_info), grid);
- gtk_stack_add_titled (GTK_STACK (stack), grid, "details", _("Details"));
-
- g_signal_connect (dialog, "response",
- G_CALLBACK (gtk_widget_destroy), NULL);
- gtk_widget_show_all (dialog);
+ gtk_widget_show_all (self->swin_info);
+ gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "info");
}
static void
@@ -817,13 +816,13 @@ font_view_application_do_open (FontViewApplication *self,
}
if (self->info_button == NULL) {
- self->info_button = gtk_button_new_with_label (_("Info"));
+ self->info_button = gtk_toggle_button_new_with_label (_("Info"));
gtk_widget_set_valign (self->info_button, GTK_ALIGN_CENTER);
gtk_style_context_add_class (gtk_widget_get_style_context (self->info_button),
"text-button");
gtk_header_bar_pack_end (GTK_HEADER_BAR (self->header), self->info_button);
- g_signal_connect (self->info_button, "clicked",
+ g_signal_connect (self->info_button, "toggled",
G_CALLBACK (info_button_clicked_cb), self);
}
@@ -868,6 +867,7 @@ font_view_application_do_open (FontViewApplication *self,
gtk_widget_show_all (self->main_window);
gtk_stack_set_visible_child_name (GTK_STACK (self->stack), "preview");
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (self->info_button), FALSE);
}
static gboolean
@@ -1146,6 +1146,11 @@ ensure_window (FontViewApplication *self)
GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_stack_add_named (GTK_STACK (self->stack), swin, "preview");
+ self->swin_info = swin = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin),
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_stack_add_named (GTK_STACK (self->stack), swin, "info");
+
gtk_widget_show_all (window);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]