summaryrefslogtreecommitdiff
path: root/setvalues.c
diff options
context:
space:
mode:
authorKaleb Keithley <kaleb@freedesktop.org>2003-11-14 15:54:52 +0000
committerKaleb Keithley <kaleb@freedesktop.org>2003-11-14 15:54:52 +0000
commitefce7cb078dd34e9e9f7d6f5f5cdd0c8ef267691 (patch)
treef9652b85cbb9728b5999913ea2aadee0b3ad1a17 /setvalues.c
R6.6 is the Xorg base-lineXORG-MAINXORG-STABLE
Diffstat (limited to 'setvalues.c')
-rw-r--r--setvalues.c122
1 files changed, 122 insertions, 0 deletions
diff --git a/setvalues.c b/setvalues.c
new file mode 100644
index 0000000..602d639
--- /dev/null
+++ b/setvalues.c
@@ -0,0 +1,122 @@
+/*
+ * $Xorg: setvalues.c,v 1.4 2001/02/09 02:05:30 xorgcvs Exp $
+ *
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+ *
+ * Author: Chris D. Peterson, MIT X Consortium
+ */
+
+#include <X11/Intrinsic.h>
+#include <X11/StringDefs.h>
+#include <X11/Xresource.h>
+
+#include <stdio.h>
+
+#include <X11/Xaw/AsciiText.h>
+#include <X11/Xaw/Cardinals.h>
+#include <X11/Xfuncs.h>
+#include <X11/Xos.h>
+#include "editresP.h"
+
+extern WNode * FindNode();
+extern void AddString();
+
+#define RESOURCE_NAME ("name")
+#define RESOURCE_CLASS ("Class")
+
+/* Function Name: PrintSetValuesError
+ * Description: Allow the SetValues error to be printed.
+ * Arguments: event - the set values call that caused this event.
+ * Returns: str - a string contining the errors.
+ */
+
+char *
+PrintSetValuesError(event)
+Event * event;
+{
+ char * errors = NULL;
+ WNode * node;
+ int i;
+ SetValuesEvent * sv_event = (SetValuesEvent *) event;
+ char buf[BUFSIZ];
+
+ if (sv_event->num_entries == 0)
+ return(XtNewString("SetValues was Successful."));
+
+ for (i = 0 ; i < (int)sv_event->num_entries ; i++) {
+ node = FindNode(global_tree_info->top_node,
+ sv_event->info[i].widgets.ids,
+ sv_event->info[i].widgets.num_widgets);
+
+ if (node == NULL) {
+ sprintf(buf, "Editres Internal Error: Unable to FindNode.\n");
+ AddString(&errors, buf);
+ continue;
+ }
+
+ sprintf(buf, "%s(0x%lx) - %s\n", node->name, node->id,
+ sv_event->info[i].message);
+ AddString(&errors, buf);
+ }
+ return(errors);
+}
+
+/* Function Name: GetResourceValueForSetValues(node);
+ * Description: Returns the value that should be sent to SetValues.
+ * Arguments: node - the node which contains the resource box.
+ * Returns: value - allocated value.
+ */
+
+char *
+GetResourceValueForSetValues(node, size)
+WNode * node;
+unsigned short * size;
+{
+ Arg args[1];
+ char *ptr, *temp;
+ XrmDatabase db = NULL;
+ XrmValue value;
+
+ XtSetArg(args[0], XtNstring, &ptr);
+ XtGetValues(node->resources->res_box->value_wid, args, ONE);
+
+ /*
+ * This makes sure that exactly the same thing happens during a set
+ * values, that would happend of we were to insert this value into
+ * the resource database.
+ */
+
+ temp = XtMalloc(sizeof(char) * (strlen(ptr) + strlen(RESOURCE_NAME) + 2));
+ sprintf(temp, "%s:%s", RESOURCE_NAME, ptr);
+ XrmPutLineResource(&db, temp);
+ XtFree(temp);
+
+ XrmGetResource(db, RESOURCE_NAME, RESOURCE_CLASS, &temp, &value);
+
+ ptr = XtMalloc(sizeof(char) * value.size);
+ memmove( ptr, value.addr, value.size);
+ XrmDestroyDatabase(db);
+
+ *size = (unsigned short) value.size;
+ return(ptr);
+}