aboutsummaryrefslogtreecommitdiffstats
path: root/matchbox2/mb-wm-theme-xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'matchbox2/mb-wm-theme-xml.c')
-rw-r--r--matchbox2/mb-wm-theme-xml.c212
1 files changed, 212 insertions, 0 deletions
diff --git a/matchbox2/mb-wm-theme-xml.c b/matchbox2/mb-wm-theme-xml.c
new file mode 100644
index 0000000..e075b7b
--- /dev/null
+++ b/matchbox2/mb-wm-theme-xml.c
@@ -0,0 +1,212 @@
+/*
+ * Matchbox Window Manager 2 - A lightweight window manager not for the
+ * desktop.
+ *
+ * Authored By Tomas Frydrych <tf@o-hand.com>
+ *
+ * Copyright (c) 2007 OpenedHand Ltd - http://o-hand.com
+ *
+ * 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, 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.
+ *
+ */
+
+#include "mb-wm-theme-xml.h"
+#include "mb-wm-theme.h"
+
+/*****************************************************************
+ * XML Parser stuff
+ */
+MBWMXmlButton *
+mb_wm_xml_button_new ()
+{
+ MBWMXmlButton * b = mb_wm_util_malloc0 (sizeof (MBWMXmlButton));
+
+ b->x = -1;
+ b->y = -1;
+ b->active_x = -1;
+ b->active_y = -1;
+ b->inactive_x = -1;
+ b->inactive_y = -1;
+
+ return b;
+}
+
+void
+mb_wm_xml_button_free (MBWMXmlButton * b)
+{
+ free (b);
+}
+
+MBWMXmlDecor *
+mb_wm_xml_decor_new ()
+{
+ MBWMXmlDecor * d = mb_wm_util_malloc0 (sizeof (MBWMXmlDecor));
+ return d;
+}
+
+void
+mb_wm_xml_decor_free (MBWMXmlDecor * d)
+{
+ MBWMList * l;
+
+ if (!d)
+ return;
+
+ l = d->buttons;
+ while (l)
+ {
+ MBWMXmlButton * b = l->data;
+ MBWMList * n = l->next;
+ mb_wm_xml_button_free (b);
+ free (l);
+
+ l = n;
+ }
+
+ if (d->font_family)
+ free (d->font_family);
+
+ free (d);
+}
+
+MBWMXmlClient *
+mb_wm_xml_client_new ()
+{
+ MBWMXmlClient * c = mb_wm_util_malloc0 (sizeof (MBWMXmlClient));
+
+ c->x = -1;
+ c->y = -1;
+ c->width = -1;
+ c->height = -1;
+
+ return c;
+}
+
+void
+mb_wm_xml_client_free (MBWMXmlClient * c)
+{
+ MBWMList * l;
+
+ if (!c)
+ return;
+
+ l = c->decors;
+ while (l)
+ {
+ MBWMXmlDecor * d = l->data;
+ MBWMList * n = l->next;
+ mb_wm_xml_decor_free (d);
+ free (l);
+
+ l = n;
+ }
+
+ free (c);
+}
+
+void
+mb_wm_xml_clr_from_string (MBWMColor * clr, const char *s)
+{
+ int r, g, b, a;
+
+ if (!s || *s != '#')
+ {
+ clr->set = False;
+ return;
+ }
+
+ sscanf (s+1,"%2x%2x%2x%2x", &r, &g, &b, &a);
+ clr->r = (double) r / 255.0;
+ clr->g = (double) g / 255.0;
+ clr->b = (double) b / 255.0;
+ clr->a = (double) a / 255.0;
+
+ clr->set = True;
+}
+
+MBWMXmlClient *
+mb_wm_xml_client_find_by_type (MBWMList *l, MBWMClientType type)
+{
+ while (l)
+ {
+ MBWMXmlClient * c = l->data;
+ if (c->type == type)
+ return c;
+
+ l = l->next;
+ }
+
+ return NULL;
+}
+
+MBWMXmlDecor *
+mb_wm_xml_decor_find_by_type (MBWMList *l, MBWMDecorType type)
+{
+ while (l)
+ {
+ MBWMXmlDecor * d = l->data;
+ if (d->type == type)
+ return d;
+
+ l = l->next;
+ }
+
+ return NULL;
+}
+
+MBWMXmlButton *
+mb_wm_xml_button_find_by_type (MBWMList *l, MBWMDecorButtonType type)
+{
+ while (l)
+ {
+ MBWMXmlButton * b = l->data;
+ if (b->type == type)
+ return b;
+
+ l = l->next;
+ }
+
+ return NULL;
+}
+
+#if 0
+void
+mb_wm_xml_client_dump (MBWMList * l)
+{
+ printf ("=== XML Clients =====\n");
+ while (l)
+ {
+ MBWMXmlClient * c = l->data;
+ MBWMList *l2 = c->decors;
+ printf ("===== client type %d =====\n", c->type);
+
+ while (l2)
+ {
+ MBWMXmlDecor * d = l2->data;
+ MBWMList *l3 = d->buttons;
+ printf ("======= decor type %d =====\n", d->type);
+
+ while (l3)
+ {
+ MBWMXmlButton * b = l3->data;
+ printf ("========= button type %d =====\n", d->type);
+
+ l3 = l3->next;
+ }
+
+ l2 = l2->next;
+ }
+
+ l = l->next;
+ }
+ printf ("=== XML Clients End =====\n");
+}
+#endif