+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+ instance.c for the Openbox window manager
+ Copyright (c) 2003 Ben Jansens
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ See the COPYING file for a copy of the GNU General Public License.
+*/
+
#include "render.h"
#include "instance.h"
static void RrTrueColorSetup (RrInstance *inst);
static void RrPseudoColorSetup (RrInstance *inst);
+#ifdef DEBUG
+#include "color.h"
+#endif
+static void
+dest(gpointer data)
+{
+#ifdef DEBUG
+ RrColor *c = data;
+ if (c->refcount > 0)
+ g_error("color %d (%d,%d,%d) in hash table with %d "
+ "leftover references",
+ c->id, RrColorRed(c), RrColorGreen(c), RrColorBlue(c),
+ c->refcount);
+#endif
+}
+
+#if 0
+static void f(gpointer key, gpointer value, gpointer n)
+{
+ RrColor *c = value;
+ if (c->id == *(int*)n)
+ g_message("color %d has %d references", c->id, c->refcount);
+}
+
+void print_refs(int id)
+{
+ g_hash_table_foreach(RrColorHash(definst), f, &id);
+}
+#endif
+
RrInstance* RrInstanceNew (Display *display, gint screen)
{
definst = g_new (RrInstance, 1);
definst->pseudo_colors = NULL;
+ definst->color_hash = g_hash_table_new_full(g_int_hash, g_int_equal,
+ NULL, dest);
+
switch (definst->visual->class) {
case TrueColor:
RrTrueColorSetup(definst);
if (inst) {
if (inst == definst) definst = NULL;
g_free(inst->pseudo_colors);
+ g_hash_table_destroy(inst->color_hash);
}
}
{
return (inst ? inst : definst)->pseudo_colors;
}
+
+GHashTable* RrColorHash (const RrInstance *inst)
+{
+ return (inst ? inst : definst)->color_hash;
+}