mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 16:00:18 +00:00
Parse GTK3 palette RGB16 values into explicit GdkRGBA structs before assignment in the palette helper.
Copy RGBA values from the GTK color chooser into palette entries for the setup dialog path. Added RGBA-aware list-store color helpers and usage for userlist, notify, and DCC views to keep color handling consistent across GTK versions.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user