File librem5-Make-GtkShortcutsWindow-adaptive.patch of Package gtk3

From: Alexander Mikhaylenko <alexm@gnome.org>
Date: Thu, 18 Mar 2021 17:42:00 +0500
Subject: librem5: Make GtkShortcutsWindow adaptive

Fixes https://source.puri.sm/Librem5/debs/gtk/-/issues/30
---
 gtk/gtkshortcutssection.c | 65 +++++++++++++++++++++++++++++++++++++++++------
 gtk/gtkshortcutswindow.c  |  5 ++--
 2 files changed, 60 insertions(+), 10 deletions(-)

diff --git a/gtk/gtkshortcutssection.c b/gtk/gtkshortcutssection.c
index 9a61765..a3d4e85 100644
--- a/gtk/gtkshortcutssection.c
+++ b/gtk/gtkshortcutssection.c
@@ -27,6 +27,7 @@
 #include "gtkstackswitcher.h"
 #include "gtkstylecontext.h"
 #include "gtkorientable.h"
+#include "gtkscrolledwindow.h"
 #include "gtksizegroup.h"
 #include "gtkwidget.h"
 #include "gtkbindings.h"
@@ -62,7 +63,8 @@ struct _GtkShortcutsSection
   gchar            *view_name;
   guint             max_height;
 
-  GtkStack         *stack;
+  GtkWidget        *column;
+  GtkWidget        *stack;
   GtkStackSwitcher *switcher;
   GtkWidget        *show_all;
   GtkWidget        *footer;
@@ -117,10 +119,12 @@ static void gtk_shortcuts_section_maybe_reflow     (GtkShortcutsSection *self);
 static gboolean gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self,
                                                            gint                 offset);
 
+/*
 static void gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan       *gesture,
                                                    GtkPanDirection      direction,
                                                    gdouble              offset,
                                                    GtkShortcutsSection *self);
+*/
 
 static void
 gtk_shortcuts_section_add (GtkContainer *container,
@@ -424,11 +428,14 @@ gtk_shortcuts_section_class_init (GtkShortcutsSectionClass *klass)
 static void
 gtk_shortcuts_section_init (GtkShortcutsSection *self)
 {
+  GtkSizeGroup *group;
+
   self->max_height = 15;
 
   gtk_orientable_set_orientation (GTK_ORIENTABLE (self), GTK_ORIENTATION_VERTICAL);
   gtk_box_set_homogeneous (GTK_BOX (self), FALSE);
   gtk_box_set_spacing (GTK_BOX (self), 22);
+/*
   gtk_container_set_border_width (GTK_CONTAINER (self), 24);
 
   self->stack = g_object_new (GTK_TYPE_STACK,
@@ -447,8 +454,38 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self)
                                  NULL);
 
   gtk_style_context_remove_class (gtk_widget_get_style_context (GTK_WIDGET (self->switcher)), GTK_STYLE_CLASS_LINKED);
+*/
+
+  self->stack = g_object_new (GTK_TYPE_SCROLLED_WINDOW,
+                              "propagate-natural-width", TRUE,
+                              "vexpand", TRUE,
+                              "visible", TRUE,
+                              NULL);
+  GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), GTK_WIDGET (self->stack));
+
+  self->column = g_object_new (GTK_TYPE_BOX,
+                               "orientation", GTK_ORIENTATION_VERTICAL,
+                               "spacing", 24,
+                               "margin", 24,
+                               "halign", GTK_ALIGN_CENTER,
+                               "visible", TRUE,
+                               NULL);
+  gtk_container_add (GTK_CONTAINER (self->stack), self->column);
+
+  group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  gtk_size_group_set_ignore_hidden (group, TRUE);
+G_GNUC_END_IGNORE_DEPRECATIONS
+  g_object_set_data_full (G_OBJECT (self->column), "accel-size-group", group, g_object_unref);
+
+  group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+  gtk_size_group_set_ignore_hidden (group, TRUE);
+G_GNUC_END_IGNORE_DEPRECATIONS
+  g_object_set_data_full (G_OBJECT (self->column), "title-size-group", group, g_object_unref);
 
   self->show_all = gtk_button_new_with_mnemonic (_("_Show All"));
+  g_object_set (self->show_all, "margin", 24, "margin-top", 0, NULL);
   gtk_widget_set_no_show_all (self->show_all, TRUE);
   g_signal_connect_swapped (self->show_all, "clicked",
                             G_CALLBACK (gtk_shortcuts_section_show_all), self);
@@ -456,13 +493,8 @@ gtk_shortcuts_section_init (GtkShortcutsSection *self)
   self->footer = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 20);
   GTK_CONTAINER_CLASS (gtk_shortcuts_section_parent_class)->add (GTK_CONTAINER (self), self->footer);
 
-  gtk_box_set_center_widget (GTK_BOX (self->footer), GTK_WIDGET (self->switcher));
   gtk_box_pack_end (GTK_BOX (self->footer), self->show_all, TRUE, TRUE, 0);
   gtk_widget_set_halign (self->show_all, GTK_ALIGN_END);
-
-  self->pan_gesture = gtk_gesture_pan_new (GTK_WIDGET (self->stack), GTK_ORIENTATION_HORIZONTAL);
-  g_signal_connect (self->pan_gesture, "pan",
-                    G_CALLBACK (gtk_shortcuts_section_pan_gesture_pan), self);
 }
 
 static void
@@ -499,6 +531,7 @@ static void
 gtk_shortcuts_section_add_group (GtkShortcutsSection *self,
                                  GtkShortcutsGroup   *group)
 {
+/*
   GList *children;
   GtkWidget *page, *column;
 
@@ -523,6 +556,14 @@ gtk_shortcuts_section_add_group (GtkShortcutsSection *self,
   g_list_free (children);
 
   gtk_container_add (GTK_CONTAINER (column), GTK_WIDGET (group));
+*/
+  gtk_container_add (GTK_CONTAINER (self->column), GTK_WIDGET (group));
+
+  g_object_set (group,
+                "accel-size-group", g_object_get_data (G_OBJECT (self->column), "accel-size-group"),
+                "title-size-group", g_object_get_data (G_OBJECT (self->column), "title-size-group"),
+                NULL);
+
   self->groups = g_list_append (self->groups, group);
 
   gtk_shortcuts_section_maybe_reflow (self);
@@ -570,7 +611,7 @@ gtk_shortcuts_section_filter_groups (GtkShortcutsSection *self)
   gtk_widget_set_visible (GTK_WIDGET (self->show_all), self->has_filtered_group);
   gtk_widget_set_visible (gtk_widget_get_parent (GTK_WIDGET (self->show_all)),
                           gtk_widget_get_visible (GTK_WIDGET (self->show_all)) ||
-                          gtk_widget_get_visible (GTK_WIDGET (self->switcher)));
+                          TRUE);
 }
 
 static void
@@ -606,6 +647,9 @@ gtk_shortcuts_section_reflow_groups (GtkShortcutsSection *self)
   guint n_pages;
   GtkWidget *current_page, *current_column;
 
+  self->need_reflow = FALSE;
+  return;
+
   /* collect all groups from the current pages */
   groups = NULL;
   pages = gtk_container_get_children (GTK_CONTAINER (self->stack));
@@ -768,7 +812,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
       gchar *title;
 
       title = g_strdup_printf ("_%u", n_pages + 1);
-      gtk_stack_add_titled (self->stack, page, title, title);
+      gtk_stack_add_titled (GTK_STACK (self->stack), page, title, title);
       g_free (title);
     }
 
@@ -790,6 +834,7 @@ static gboolean
 gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self,
                                            gint                 offset)
 {
+/*
   GtkWidget *child;
   GList *children, *l;
 
@@ -812,8 +857,11 @@ gtk_shortcuts_section_change_current_page (GtkShortcutsSection *self,
   g_list_free (children);
 
   return TRUE;
+*/
+  return FALSE;
 }
 
+/*
 static void
 gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan       *gesture,
                                        GtkPanDirection      direction,
@@ -832,3 +880,4 @@ gtk_shortcuts_section_pan_gesture_pan (GtkGesturePan       *gesture,
 
   gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_DENIED);
 }
+*/
diff --git a/gtk/gtkshortcutswindow.c b/gtk/gtkshortcutswindow.c
index 36f55f6..803b5d3 100644
--- a/gtk/gtkshortcutswindow.c
+++ b/gtk/gtkshortcutswindow.c
@@ -871,7 +871,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self)
   GtkWidget *empty;
   PangoAttrList *attributes;
 
-  gtk_window_set_resizable (GTK_WINDOW (self), FALSE);
+  gtk_window_set_default_size (GTK_WINDOW (self), -1, 600);
   gtk_window_set_type_hint (GTK_WINDOW (self), GDK_WINDOW_TYPE_HINT_DIALOG);
 
   g_signal_connect (self, "key-press-event",
@@ -952,6 +952,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self)
 
   priv->menu_label = g_object_new (GTK_TYPE_LABEL,
                                    "visible", TRUE,
+                                   "ellipsize", PANGO_ELLIPSIZE_END,
                                    NULL);
   gtk_container_add (GTK_CONTAINER (menu_box), GTK_WIDGET (priv->menu_label));
 
@@ -986,7 +987,7 @@ gtk_shortcuts_window_init (GtkShortcutsWindow *self)
   gtk_container_add (GTK_CONTAINER (priv->search_bar), GTK_WIDGET (priv->search_entry));
   g_object_set (priv->search_entry,
                 "placeholder-text", _("Search Shortcuts"),
-                "width-chars", 40,
+                "width-chars", 30,
                 NULL);
   g_signal_connect_object (priv->search_entry,
                            "search-changed",
openSUSE Build Service is sponsored by