summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-03-17 05:12:12 +0000
committerMatthias Clasen <mclasen@redhat.com>2020-03-17 05:12:12 +0000
commit5d4b46b2d866e68af90c103a673867c6d08f2a72 (patch)
tree401a9ab1d051f8cdcaec887ac25d27b13ca3348d
parent5bf51adcce3a41d1b075193b24d3edd526d50e99 (diff)
parent292cea73102488b7b08d4a46fe97766fc252d142 (diff)
downloadgtk+-5d4b46b2d866e68af90c103a673867c6d08f2a72.tar.gz
Merge branch 'emoji-chooser-fixes' into 'master'
Emoji chooser fixes See merge request GNOME/gtk!1530
-rw-r--r--gtk/gtkemojichooser.c49
-rw-r--r--gtk/theme/Adwaita/_common.scss1
2 files changed, 48 insertions, 2 deletions
diff --git a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c
index 66915d31c9..121b1b697f 100644
--- a/gtk/gtkemojichooser.c
+++ b/gtk/gtkemojichooser.c
@@ -35,6 +35,7 @@
#include "gtksearchentryprivate.h"
#include "gtkstylecontext.h"
#include "gtktext.h"
+#include "gtknative.h"
#include "gdk/gdkprofilerprivate.h"
/**
@@ -68,6 +69,49 @@
#define BOX_SPACE 6
+GType gtk_emoji_chooser_child_get_type (void);
+
+#define GTK_TYPE_EMOJI_CHOOSER_CHILD (gtk_emoji_chooser_child_get_type ())
+
+typedef struct
+{
+ GtkFlowBoxChild parent;
+ GtkWidget *variations;
+} GtkEmojiChooserChild;
+
+typedef struct
+{
+ GtkFlowBoxChildClass parent_class;
+} GtkEmojiChooserChildClass;
+
+G_DEFINE_TYPE (GtkEmojiChooserChild, gtk_emoji_chooser_child, GTK_TYPE_FLOW_BOX_CHILD)
+
+static void
+gtk_emoji_chooser_child_init (GtkEmojiChooserChild *child)
+{
+}
+
+static void
+gtk_emoji_chooser_child_size_allocate (GtkWidget *widget,
+ int width,
+ int height,
+ int baseline)
+{
+ GtkEmojiChooserChild *child = (GtkEmojiChooserChild *)widget;
+
+ GTK_WIDGET_CLASS (gtk_emoji_chooser_child_parent_class)->size_allocate (widget, width, height, baseline);
+ if (child->variations)
+ gtk_native_check_resize (GTK_NATIVE (child->variations));
+}
+
+static void
+gtk_emoji_chooser_child_class_init (GtkEmojiChooserChildClass *class)
+{
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
+ widget_class->size_allocate = gtk_emoji_chooser_child_size_allocate;
+ gtk_widget_class_set_css_name (widget_class, "emoji");
+}
+
typedef struct {
GtkWidget *box;
GtkWidget *heading;
@@ -293,6 +337,7 @@ show_variations (GtkEmojiChooser *chooser,
GVariant *emoji_data;
GtkWidget *parent_popover;
gunichar modifier;
+ GtkEmojiChooserChild *ch = (GtkEmojiChooserChild *)child;
if (!child)
return;
@@ -305,7 +350,7 @@ show_variations (GtkEmojiChooser *chooser,
return;
parent_popover = gtk_widget_get_ancestor (child, GTK_TYPE_POPOVER);
- popover = gtk_popover_new ();
+ popover = ch->variations = gtk_popover_new ();
gtk_widget_set_parent (popover, child);
view = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
gtk_widget_add_css_class (view, "view");
@@ -419,7 +464,7 @@ add_emoji (GtkWidget *box,
return;
}
- child = g_object_new (GTK_TYPE_FLOW_BOX_CHILD, "css-name", "emoji", NULL);
+ child = g_object_new (GTK_TYPE_EMOJI_CHOOSER_CHILD, NULL);
g_object_set_data_full (G_OBJECT (child), "emoji-data",
g_variant_ref (item),
(GDestroyNotify)g_variant_unref);
diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss
index 15ad38c6ae..9c57b2f173 100644
--- a/gtk/theme/Adwaita/_common.scss
+++ b/gtk/theme/Adwaita/_common.scss
@@ -4304,6 +4304,7 @@ popover.emoji-picker emoji {
padding: 6px;
border-radius: 6px;
+ &:focus,
&:hover {
background: $selected_bg_color;
}