#include "utils.h"
#include "gtkutils.h"
+#define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL)
+#define RGB_FROM_GDK_COLOR(c) \
+ ((CL(c.red) << (gulong) 16) | \
+ (CL(c.green) << (gulong) 8) | \
+ (CL(c.blue)))
+
typedef enum
{
DUMMY_PARAM
gint i;
gint name_len;
const gchar *value;
+ GdkColor color;
for (i = 0; param[i].name != NULL; i++) {
name_len = strlen(param[i].name);
*((gushort *)param[i].data) =
(gushort)atoi(value);
break;
+ case P_COLOR:
+ if (gdk_color_parse(value, &color))
+ *((gulong *)param[i].data) = RGB_FROM_GDK_COLOR(color);
+ else
+ /* be compatible and accept ints */
+ *((gulong *)param[i].data) = strtoul(value, 0, 10);
+ break;
default:
break;
}
{ \
g_warning("failed to write configuration to file\n"); \
if (orig_fp) fclose(orig_fp); \
- prefs_write_close_revert(pfile); \
+ prefs_file_close_revert(pfile); \
g_free(rcpath); \
g_free(block_label); \
return; \
}
if (orig_fp) fclose(orig_fp);
- if (prefs_write_close(pfile) < 0)
+ if (prefs_file_close(pfile) < 0)
g_warning("failed to write configuration to file\n");
g_free(rcpath);
g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name,
*((gushort *)param[i].data));
break;
+ case P_COLOR:
+ g_snprintf(buf, sizeof buf, "%s=#%6.6lx\n", param[i].name,
+ *((gulong *) param[i].data));
+ break;
default:
buf[0] = '\0';
}
void prefs_set_default(PrefParam *param)
{
gint i;
+ GdkColor color;
g_return_if_fail(param != NULL);
else
*((gushort *)param[i].data) = 0;
break;
+ case P_COLOR:
+ if (param[i].defval != NULL && gdk_color_parse(param[i].defval, &color))
+ *((gulong *)param[i].data) =
+ RGB_FROM_GDK_COLOR(color);
+ else if (param[i].defval)
+ /* be compatible and accept ints */
+ *((gulong *)param[i].data) = strtoul(param[i].defval, 0, 10);
+ else
+ *((gulong *)param[i].data) = 0;
+ break;
default:
break;
}
tmpparam.data = &enum_data;
break;
case P_OTHER:
+ default:
break;
}
tmpparam.widget_set_func(&tmpparam);
void prefs_set_data_from_entry(PrefParam *pparam)
{
gchar **str, *entry_str;
+ GdkColor color;
g_return_if_fail(*pparam->widget != NULL);
pparam->type);
}
}
+
+static GSList *prefs_pages = NULL;
+
+void prefs_gtk_open()
+{
+ prefswindow_open(prefs_pages, NULL);
+}
+
+void prefs_gtk_register_page(PrefsPage *page)
+{
+ prefs_pages = g_slist_append(prefs_pages, page);
+}
+
+void prefs_gtk_unregister_page(PrefsPage *page)
+{
+ prefs_pages = g_slist_remove(prefs_pages, page);
+}