diff --git a/src/fe-gtk/dccgui.c b/src/fe-gtk/dccgui.c index b37a777d..baa25764 100644 --- a/src/fe-gtk/dccgui.c +++ b/src/fe-gtk/dccgui.c @@ -151,6 +151,22 @@ fe_dcc_send_filereq (struct session *sess, char *nick, int maxcps, int passive) g_free (tbuf); } +static void +dcc_store_color (GtkListStore *store, GtkTreeIter *iter, int column, int color_index) +{ + const PaletteColor *color = NULL; + + if (color_index != 1) + color = &colors[color_index]; + +#if GTK_CHECK_VERSION(3,0,0) + const GdkRGBA *rgba = color; + gtk_list_store_set (store, iter, column, rgba, -1); +#else + gtk_list_store_set (store, iter, column, color, -1); +#endif +} + static void dcc_prepare_row_chat (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, gboolean update_only) @@ -171,11 +187,8 @@ dcc_prepare_row_chat (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, CCOL_SENT, size, CCOL_START, date, CCOL_DCC, dcc, - CCOL_COLOR, - dccstat[dcc->dccstat].color == 1 ? - NULL : - colors + dccstat[dcc->dccstat].color, -1); + dcc_store_color (store, iter, CCOL_COLOR, dccstat[dcc->dccstat].color); } static void @@ -211,10 +224,6 @@ dcc_prepare_row_send (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, COL_PERC, perc, COL_SPEED, kbs, COL_ETA, eta, - COL_COLOR, - dccstat[dcc->dccstat].color == 1 ? - NULL : - colors + dccstat[dcc->dccstat].color, -1); else gtk_list_store_set (store, iter, @@ -228,11 +237,8 @@ dcc_prepare_row_send (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, COL_ETA, eta, COL_NICK, dcc->nick, COL_DCC, dcc, - COL_COLOR, - dccstat[dcc->dccstat].color == 1 ? - NULL : - colors + dccstat[dcc->dccstat].color, -1); + dcc_store_color (store, iter, COL_COLOR, dccstat[dcc->dccstat].color); } static void @@ -271,10 +277,6 @@ dcc_prepare_row_recv (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, COL_PERC, perc, COL_SPEED, kbs, COL_ETA, eta, - COL_COLOR, - dccstat[dcc->dccstat].color == 1 ? - NULL : - colors + dccstat[dcc->dccstat].color, -1); else gtk_list_store_set (store, iter, @@ -288,11 +290,8 @@ dcc_prepare_row_recv (struct DCC *dcc, GtkListStore *store, GtkTreeIter *iter, COL_ETA, eta, COL_NICK, dcc->nick, COL_DCC, dcc, - COL_COLOR, - dccstat[dcc->dccstat].color == 1 ? - NULL : - colors + dccstat[dcc->dccstat].color, -1); + dcc_store_color (store, iter, COL_COLOR, dccstat[dcc->dccstat].color); } static gboolean diff --git a/src/fe-gtk/notifygui.c b/src/fe-gtk/notifygui.c index 92b88c84..ab9794bc 100644 --- a/src/fe-gtk/notifygui.c +++ b/src/fe-gtk/notifygui.c @@ -83,6 +83,17 @@ notify_treecell_property_mapper (GtkTreeViewColumn *col, GtkCellRenderer *cell, g_free (text); } +static void +notify_store_color (GtkListStore *store, GtkTreeIter *iter, const PaletteColor *color) +{ +#if GTK_CHECK_VERSION(3,0,0) + const GdkRGBA *rgba = color; + gtk_list_store_set (store, iter, COLOUR_COLUMN, rgba, -1); +#else + gtk_list_store_set (store, iter, COLOUR_COLUMN, color, -1); +#endif +} + static void notify_row_cb (GtkTreeSelection *sel, GtkTreeView *view) { @@ -200,7 +211,8 @@ notify_gui_update (void) if (!valid) /* create new tree row if required */ gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, name, 1, status, - 2, server, 3, seen, 4, &colors[4], 5, NULL, -1); + 2, server, 3, seen, 5, NULL, -1); + notify_store_color (store, &iter, &colors[4]); if (valid) valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); @@ -225,7 +237,8 @@ notify_gui_update (void) if (!valid) /* create new tree row if required */ gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, name, 1, status, - 2, server, 3, seen, 4, &colors[3], 5, servnot, -1); + 2, server, 3, seen, 5, servnot, -1); + notify_store_color (store, &iter, &colors[3]); if (valid) valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); diff --git a/src/fe-gtk/palette.c b/src/fe-gtk/palette.c index 2eecb7c6..f6b59fbf 100644 --- a/src/fe-gtk/palette.c +++ b/src/fe-gtk/palette.c @@ -49,9 +49,11 @@ palette_color_set_rgb16 (PaletteColor *color, guint16 red, guint16 green, guint1 { #if GTK_CHECK_VERSION(3,0,0) char buf[8]; + GdkRGBA parsed; g_snprintf (buf, sizeof (buf), "#%02x%02x%02x", red >> 8, green >> 8, blue >> 8); - gdk_rgba_parse (color, buf); + gdk_rgba_parse (&parsed, buf); + *color = parsed; #else color->red = red; color->green = green; diff --git a/src/fe-gtk/setup.c b/src/fe-gtk/setup.c index 0a2f37f6..08648a06 100644 --- a/src/fe-gtk/setup.c +++ b/src/fe-gtk/setup.c @@ -1540,7 +1540,10 @@ setup_color_response_cb (GtkDialog *dialog, gint response_id, gpointer user_data if (response_id == GTK_RESPONSE_OK) { - gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), data->color); + GdkRGBA rgba; + + gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER (dialog), &rgba); + *data->color = rgba; color_change = TRUE; setup_color_button_apply (data->button, data->color); diff --git a/src/fe-gtk/userlistgui.c b/src/fe-gtk/userlistgui.c index 3515cd35..04b408d3 100644 --- a/src/fe-gtk/userlistgui.c +++ b/src/fe-gtk/userlistgui.c @@ -46,7 +46,7 @@ enum COL_NICK=1, /* char * */ COL_HOST=2, /* char * */ COL_USER=3, /* struct User * */ - COL_GDKCOLOR=4 /* PaletteColor * */ + COL_GDKCOLOR=4 /* PaletteColor */ }; @@ -327,8 +327,8 @@ fe_userlist_rehash (session *sess, struct User *user) gtk_list_store_set (GTK_LIST_STORE (sess->res->user_model), iter, COL_HOST, user->hostname, - COL_GDKCOLOR, nick_color ? &colors[nick_color] : NULL, -1); + userlist_store_color (GTK_LIST_STORE (sess->res->user_model), iter, nick_color); } void @@ -362,8 +362,8 @@ fe_userlist_insert (session *sess, struct User *newuser, gboolean sel) COL_NICK, nick, COL_HOST, newuser->hostname, COL_USER, newuser, - COL_GDKCOLOR, nick_color ? &colors[nick_color] : NULL, -1); + userlist_store_color (GTK_LIST_STORE (model), &iter, nick_color); if (!prefs.hex_gui_ulist_icons) { @@ -467,6 +467,19 @@ userlist_ops_cmp (GtkTreeModel *model, GtkTreeIter *iter_a, GtkTreeIter *iter_b, return nick_cmp_az_ops (((session*)userdata)->server, user_a, user_b); } +static void +userlist_store_color (GtkListStore *store, GtkTreeIter *iter, int color_index) +{ + const PaletteColor *color = color_index ? &colors[color_index] : NULL; + +#if GTK_CHECK_VERSION(3,0,0) + const GdkRGBA *rgba = color; + gtk_list_store_set (store, iter, COL_GDKCOLOR, rgba, -1); +#else + gtk_list_store_set (store, iter, COL_GDKCOLOR, color, -1); +#endif +} + GtkListStore * userlist_create_model (session *sess) {