parent
d53ce490a7
commit
2e49eaf2dc
1 changed files with 78 additions and 8 deletions
86
test-focus.c
86
test-focus.c
|
@ -1,6 +1,75 @@
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include <egg-list-box.h>
|
#include <egg-list-box.h>
|
||||||
|
|
||||||
|
static GdkPixbuf *
|
||||||
|
get_pix (GtkStyleContext *context,
|
||||||
|
const gchar *icon_name,
|
||||||
|
gint icon_size)
|
||||||
|
{
|
||||||
|
static GHashTable *cache = NULL;
|
||||||
|
GtkStateFlags state;
|
||||||
|
gchar *key;
|
||||||
|
GtkIconInfo *icon_info;
|
||||||
|
GdkPixbuf *pix;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
if (cache == NULL)
|
||||||
|
{
|
||||||
|
cache = g_hash_table_new_full (g_str_hash, g_str_equal,
|
||||||
|
g_free, g_object_unref);
|
||||||
|
}
|
||||||
|
|
||||||
|
state = gtk_style_context_get_state (context);
|
||||||
|
key = g_strdup_printf ("%s-%u-%u", icon_name, icon_size, state);
|
||||||
|
pix = g_hash_table_lookup (cache, key);
|
||||||
|
if (pix != NULL)
|
||||||
|
{
|
||||||
|
g_free (key);
|
||||||
|
return pix;
|
||||||
|
}
|
||||||
|
|
||||||
|
icon_info = gtk_icon_theme_lookup_icon (gtk_icon_theme_get_default (),
|
||||||
|
icon_name, icon_size, 0);
|
||||||
|
pix = gtk_icon_info_load_symbolic_for_context (icon_info, context, NULL, &error);
|
||||||
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
/* Takes ownership of key and pix */
|
||||||
|
g_hash_table_insert (cache, key, pix);
|
||||||
|
|
||||||
|
return pix;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
image_update_pixbuf (GtkWidget *image)
|
||||||
|
{
|
||||||
|
const gchar *icon_name;
|
||||||
|
gint icon_size;
|
||||||
|
GdkPixbuf *pix;
|
||||||
|
|
||||||
|
icon_name = g_object_get_data ((GObject *) image, "icon-name");
|
||||||
|
icon_size = GPOINTER_TO_INT (g_object_get_data ((GObject *) image, "icon-size"));
|
||||||
|
pix = get_pix (gtk_widget_get_style_context (image), icon_name, icon_size);
|
||||||
|
|
||||||
|
gtk_image_set_from_pixbuf ((GtkImage *) image, pix);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GtkWidget *
|
||||||
|
new_image (const gchar *icon_name,
|
||||||
|
gint icon_size)
|
||||||
|
{
|
||||||
|
GtkWidget *image;
|
||||||
|
|
||||||
|
image = gtk_image_new ();
|
||||||
|
g_object_set_data ((GObject *) image, "icon-name", (gchar *) icon_name);
|
||||||
|
g_object_set_data ((GObject *) image, "icon-size", GINT_TO_POINTER (icon_size));
|
||||||
|
g_signal_connect (image, "style-updated",
|
||||||
|
G_CALLBACK (image_update_pixbuf), NULL);
|
||||||
|
|
||||||
|
image_update_pixbuf (image);
|
||||||
|
|
||||||
|
return image;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_row (EggListBox *view)
|
add_row (EggListBox *view)
|
||||||
{
|
{
|
||||||
|
@ -8,15 +77,15 @@ add_row (EggListBox *view)
|
||||||
GtkStyleContext *context;
|
GtkStyleContext *context;
|
||||||
GtkWidget *avatar;
|
GtkWidget *avatar;
|
||||||
GtkWidget *first_line_alig;
|
GtkWidget *first_line_alig;
|
||||||
GtkWidget *alias;
|
//GtkWidget *alias;
|
||||||
GtkWidget *phone_icon;
|
GtkWidget *phone_icon;
|
||||||
GtkWidget *presence_msg;
|
//GtkWidget *presence_msg;
|
||||||
GtkWidget *presence_icon;
|
GtkWidget *presence_icon;
|
||||||
|
|
||||||
main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
|
main_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 8);
|
||||||
|
|
||||||
/* Avatar */
|
/* Avatar */
|
||||||
avatar = gtk_image_new_from_icon_name ("avatar-default-symbolic", GTK_ICON_SIZE_LARGE_TOOLBAR);
|
avatar = new_image ("avatar-default-symbolic", 48);
|
||||||
|
|
||||||
gtk_widget_set_size_request (avatar, 48, 48);
|
gtk_widget_set_size_request (avatar, 48, 48);
|
||||||
|
|
||||||
|
@ -29,15 +98,15 @@ add_row (EggListBox *view)
|
||||||
first_line_alig = gtk_alignment_new (0, 0.5, 1, 1);
|
first_line_alig = gtk_alignment_new (0, 0.5, 1, 1);
|
||||||
first_line_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
first_line_box = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
alias = gtk_label_new ("My Cool Alias");
|
alias = gtk_label_new ("My Cool Alias");
|
||||||
gtk_label_set_ellipsize (GTK_LABEL (alias), PANGO_ELLIPSIZE_END);
|
gtk_label_set_ellipsize (GTK_LABEL (alias), PANGO_ELLIPSIZE_END);
|
||||||
gtk_box_pack_start (GTK_BOX (first_line_box), alias,
|
gtk_box_pack_start (GTK_BOX (first_line_box), alias,
|
||||||
FALSE, FALSE, 0);
|
FALSE, FALSE, 0);
|
||||||
gtk_misc_set_alignment (GTK_MISC (alias), 0, 0.5);
|
gtk_misc_set_alignment (GTK_MISC (alias), 0, 0.5);
|
||||||
gtk_widget_show (alias);
|
gtk_widget_show (alias);
|
||||||
|
*/
|
||||||
phone_icon = gtk_image_new_from_icon_name ("phone-symbolic",
|
phone_icon = new_image ("phone-symbolic", 24);
|
||||||
GTK_ICON_SIZE_MENU);
|
|
||||||
gtk_misc_set_alignment (GTK_MISC (phone_icon), 0, 0.5);
|
gtk_misc_set_alignment (GTK_MISC (phone_icon), 0, 0.5);
|
||||||
gtk_box_pack_start (GTK_BOX (first_line_box), phone_icon,
|
gtk_box_pack_start (GTK_BOX (first_line_box), phone_icon,
|
||||||
TRUE, TRUE, 0);
|
TRUE, TRUE, 0);
|
||||||
|
@ -54,6 +123,7 @@ add_row (EggListBox *view)
|
||||||
gtk_widget_show (box);
|
gtk_widget_show (box);
|
||||||
|
|
||||||
/* Presence */
|
/* Presence */
|
||||||
|
/*
|
||||||
presence_msg = gtk_label_new ("My Cool Presence Message");
|
presence_msg = gtk_label_new ("My Cool Presence Message");
|
||||||
gtk_label_set_ellipsize (GTK_LABEL (presence_msg),
|
gtk_label_set_ellipsize (GTK_LABEL (presence_msg),
|
||||||
PANGO_ELLIPSIZE_END);
|
PANGO_ELLIPSIZE_END);
|
||||||
|
@ -62,9 +132,9 @@ add_row (EggListBox *view)
|
||||||
|
|
||||||
context = gtk_widget_get_style_context (presence_msg);
|
context = gtk_widget_get_style_context (presence_msg);
|
||||||
gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
|
gtk_style_context_add_class (context, GTK_STYLE_CLASS_DIM_LABEL);
|
||||||
|
*/
|
||||||
/* Presence icon */
|
/* Presence icon */
|
||||||
presence_icon = gtk_image_new_from_icon_name ("user-available", GTK_ICON_SIZE_MENU);
|
presence_icon = new_image ("user-available", 16);
|
||||||
|
|
||||||
gtk_box_pack_start (GTK_BOX (main_box), presence_icon,
|
gtk_box_pack_start (GTK_BOX (main_box), presence_icon,
|
||||||
FALSE, FALSE, 0);
|
FALSE, FALSE, 0);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue