diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-03-17 05:12:12 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-03-17 05:12:12 +0000 |
commit | 5d4b46b2d866e68af90c103a673867c6d08f2a72 (patch) | |
tree | 401a9ab1d051f8cdcaec887ac25d27b13ca3348d | |
parent | 5bf51adcce3a41d1b075193b24d3edd526d50e99 (diff) | |
parent | 292cea73102488b7b08d4a46fe97766fc252d142 (diff) | |
download | gtk+-5d4b46b2d866e68af90c103a673867c6d08f2a72.tar.gz |
Merge branch 'emoji-chooser-fixes' into 'master'
Emoji chooser fixes
See merge request GNOME/gtk!1530
-rw-r--r-- | gtk/gtkemojichooser.c | 49 | ||||
-rw-r--r-- | gtk/theme/Adwaita/_common.scss | 1 |
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; } |