This file is part of the Lucid Widget Library.
-The Lucid Widget Library is free software; you can redistribute it and/or
+The Lucid Widget Library 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.
The Lucid Widget Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
+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.
You should have received a copy of the GNU General Public License
along with GNU Emacs; see the file COPYING. If not, write to
-the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
#ifdef NeXT
#undef __STRICT_BSD__ /* ick */
#include <config.h>
#endif
+#include "../src/lisp.h"
+
#include <sys/types.h>
#include <stdio.h>
#include <ctype.h>
#include "lwlib-utils.h"
#include <X11/StringDefs.h>
-extern long *xmalloc();
-
#if defined (USE_LUCID)
#include "lwlib-Xlw.h"
#endif
#define USE_XAW
#endif /* not USE_MOTIF && USE_LUCID */
#endif
-#if defined (USE_OLIT)
-#include "lwlib-Xol.h"
-#endif
#if defined (USE_XAW)
#include <X11/Xaw/Paned.h>
#include "lwlib-Xaw.h"
#endif
-#if !defined (USE_LUCID) && !defined (USE_MOTIF) && !defined (USE_OLIT)
-ERROR! At least one of USE_LUCID, USE_MOTIF or USE_OLIT must be defined.
-#endif
-
-#if defined (USE_MOTIF) && defined (USE_OLIT)
-ERROR! no more than one of USE_MOTIF and USE_OLIT may be defined.
+#if !defined (USE_LUCID) && !defined (USE_MOTIF)
+ #error At least one of USE_LUCID or USE_MOTIF must be defined.
#endif
#ifndef max
char *lwlib_toolkit_type = "lucid";
#endif
-#if defined __STDC__ || defined PROTOTYPES
-#define P_(x) x
-#else
-#define P_(x) ()
-#endif
-
static widget_value *merge_widget_value P_ ((widget_value *,
widget_value *,
int, int *));
static void initialize_widget_instance P_ ((widget_instance *));
static widget_creation_function find_in_table P_ ((char *, widget_creation_entry *));
static Boolean dialog_spec_p P_ ((char *));
-static void instantiate_widget_instance P_ ((widget_instance *));
static void destroy_one_instance P_ ((widget_instance *));
static void lw_pop_all_widgets P_ ((LWLIB_ID, Boolean));
static Boolean get_one_value P_ ((widget_instance *, widget_value *));
static void show_one_widget_busy P_ ((Widget, Boolean));
-
+
void
lwlib_memset (address, value, length)
char *address;
int value;
- int length;
+ size_t length;
{
int i;
wv = (widget_value *) malloc (sizeof (widget_value));
malloc_cpt++;
}
- lwlib_memset (wv, 0, sizeof (widget_value));
+ lwlib_memset ((void*) wv, 0, sizeof (widget_value));
return wv;
}
/* this is analogous to free(). It frees only what was allocated
- by malloc_widget_value(), and no substructures.
+ by malloc_widget_value(), and no substructures.
*/
void
free_widget_value (wv)
if (wv->name) free (wv->name);
if (wv->value) free (wv->value);
if (wv->key) free (wv->key);
- if (wv->help) free (wv->help);
- wv->name = wv->value = wv->key = wv->help = (char *) 0xDEADBEEF;
+ wv->name = wv->value = wv->key = (char *) 0xDEADBEEF;
if (wv->toolkit_data && wv->free_toolkit_data)
{
change_type change;
{
widget_value* copy;
-
+
if (!val)
return NULL;
if (val == (widget_value *) 1)
copy->name = safe_strdup (val->name);
copy->value = safe_strdup (val->value);
copy->key = safe_strdup (val->key);
- copy->help = safe_strdup (val->help);
+ copy->help = val->help;
copy->enabled = val->enabled;
copy->button_type = val->button_type;
copy->selected = val->selected;
instance->widget = NULL;
}
+/* The messy #ifdef PROTOTYPES here and elsewhere are prompted by a
+ flood of warnings about argument promotion from proprietary ISO C
+ compilers. (etags still only makes one entry for each function.) */
static widget_instance *
+#ifdef PROTOTYPES
+allocate_widget_instance (widget_info* info, Widget parent, Boolean pop_up_p)
+#else
allocate_widget_instance (info, parent, pop_up_p)
widget_info* info;
Widget parent;
Boolean pop_up_p;
+#endif
{
widget_instance* instance =
(widget_instance*)malloc (sizeof (widget_instance));
}
static widget_info *
+#ifdef PROTOTYPES
+get_widget_info (LWLIB_ID id, Boolean remove_p)
+#else
get_widget_info (id, remove_p)
LWLIB_ID id;
Boolean remove_p;
+#endif
{
widget_info* info;
widget_info* prev;
}
static widget_instance *
+#ifdef PROTOTYPES
+get_widget_instance (Widget widget, Boolean remove_p)
+#else
get_widget_instance (widget, remove_p)
Widget widget;
Boolean remove_p;
+#endif
{
widget_info* info;
widget_instance* instance;
}
static widget_instance*
+#ifdef PROTOTYPES
+find_instance (LWLIB_ID id, Widget parent, Boolean pop_up_p)
+#else
find_instance (id, parent, pop_up_p)
LWLIB_ID id;
Widget parent;
Boolean pop_up_p;
+#endif
{
widget_info* info = get_widget_info (id, False);
widget_instance* instance;
free_widget_value_tree (val1);
return NULL;
}
-
+
change = NO_CHANGE;
if (safe_strcmp (val1->name, val2->name))
safe_free_str (val1->key);
val1->key = safe_strdup (val2->key);
}
- if (safe_strcmp (val1->help, val2->help))
+ if (! EQ (val1->help, val2->help))
{
EXPLAIN (val1->name, change, VISIBLE_CHANGE, "help change",
val1->help, val2->help);
change = max (change, VISIBLE_CHANGE);
- safe_free_str (val1->help);
- val1->help = safe_strdup (val2->help);
+ val1->help = val2->help;
}
if (val1->enabled != val2->enabled)
{
merged_contents =
merge_widget_value (val1->contents, val2->contents, level - 1,
change_p);
-
+
if (val1->contents && !merged_contents)
{
/* This used to say INVISIBLE_CHANGE,
#endif
#endif
}
-
+
val1->contents = merged_contents;
}
val1->this_one_change = this_one_change;
val1->change = change;
-
+
if (change > NO_CHANGE && val1->toolkit_data)
{
*change_p = 1;
char* real_name = (char *) xmalloc (length);
real_name [0] = '*';
strcpy (real_name + 1, name);
-
+
widget = XtNameToWidget (instance->widget, real_name);
free (real_name);
}
static void
+#ifdef PROTOTYPES
+set_one_value (widget_instance* instance, widget_value* val, Boolean deep_p)
+#else
set_one_value (instance, val, deep_p)
widget_instance* instance;
widget_value* val;
Boolean deep_p;
+#endif
{
Widget widget = name_to_widget (instance, val->name);
-
+
if (widget)
{
#if defined (USE_LUCID)
if (lw_motif_widget_p (instance->widget))
xm_update_one_widget (instance, widget, val, deep_p);
#endif
-#if defined (USE_OLIT)
- if (lw_olit_widget_p (instance->widget))
- xol_update_one_widget (instance, widget, val, deep_p);
-#endif
#if defined (USE_XAW)
if (lw_xaw_widget_p (instance->widget))
xaw_update_one_widget (instance, widget, val, deep_p);
}
static void
+#ifdef PROTOTYPES
+update_one_widget_instance (widget_instance* instance, Boolean deep_p)
+#else
update_one_widget_instance (instance, deep_p)
widget_instance* instance;
Boolean deep_p;
+#endif
{
widget_value *val;
}
static void
+#ifdef PROTOTYPES
+update_all_widget_values (widget_info* info, Boolean deep_p)
+#else
update_all_widget_values (info, deep_p)
widget_info* info;
Boolean deep_p;
+#endif
{
widget_instance* instance;
widget_value* val;
}
int
+#ifdef PROTOTYPES
+lw_modify_all_widgets (LWLIB_ID id, widget_value* val, Boolean deep_p)
+#else
lw_modify_all_widgets (id, val, deep_p)
LWLIB_ID id;
widget_value* val;
Boolean deep_p;
+#endif
{
widget_info* info = get_widget_info (id, False);
widget_value* new_val;
dialog_spec_p (name)
char* name;
{
- /* return True if name matches [EILPQeilpq][1-9][Bb] or
+ /* return True if name matches [EILPQeilpq][1-9][Bb] or
[EILPQeilpq][1-9][Bb][Rr][1-9] */
if (!name)
return False;
-
+
switch (name [0])
{
case 'E': case 'I': case 'L': case 'P': case 'Q':
}
else
return False;
-
+
default:
return False;
}
if (!function)
function = find_in_table (instance->info->type, xm_creation_table);
#endif
-#if defined (USE_OLIT)
- if (!function)
- function = find_in_table (instance->info->type, xol_creation_table);
-#endif
#if defined (USE_XAW)
if (!function)
function = find_in_table (instance->info->type, xaw_creation_table);
#if defined (USE_XAW)
if (!function)
function = xaw_create_dialog;
-#endif
-#if defined (USE_OLIT)
- /* not yet */
#endif
}
}
-
+
if (!function)
{
printf ("No creation function for widget type %s\n",
/* XtRealizeWidget (instance->widget);*/
}
-void
+void
lw_register_widget (type, name, id, val, pre_activate_cb,
selection_cb, post_activate_cb, highlight_cb)
char* type;
}
Widget
+#ifdef PROTOTYPES
+lw_get_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p)
+#else
lw_get_widget (id, parent, pop_up_p)
LWLIB_ID id;
Widget parent;
Boolean pop_up_p;
+#endif
{
widget_instance* instance;
-
+
instance = find_instance (id, parent, pop_up_p);
return instance ? instance->widget : NULL;
}
Widget
+#ifdef PROTOTYPES
+lw_make_widget (LWLIB_ID id, Widget parent, Boolean pop_up_p)
+#else
lw_make_widget (id, parent, pop_up_p)
LWLIB_ID id;
Widget parent;
Boolean pop_up_p;
+#endif
{
widget_instance* instance;
widget_info* info;
-
+
instance = find_instance (id, parent, pop_up_p);
if (!instance)
{
}
Widget
+#ifdef PROTOTYPES
+lw_create_widget (char* type, char* name, LWLIB_ID id, widget_value* val,
+ Widget parent, Boolean pop_up_p,
+ lw_callback pre_activate_cb, lw_callback selection_cb,
+ lw_callback post_activate_cb, lw_callback highlight_cb)
+#else
lw_create_widget (type, name, id, val, parent, pop_up_p, pre_activate_cb,
selection_cb, post_activate_cb, highlight_cb)
char* type;
lw_callback selection_cb;
lw_callback post_activate_cb;
lw_callback highlight_cb;
+#endif
{
lw_register_widget (type, name, id, val, pre_activate_cb, selection_cb,
post_activate_cb, highlight_cb);
return lw_make_widget (id, parent, pop_up_p);
}
-
+
\f
/* destroying the widgets */
static void
xm_destroy_instance (instance);
else
#endif
-#if defined (USE_OLIT)
- if (lw_olit_widget_p (instance->widget))
- xol_destroy_instance (instance);
- else
-#endif
#if defined (USE_XAW)
if (lw_xaw_widget_p (instance->widget))
xaw_destroy_instance (instance);
- else
+ else
#endif
/* do not remove the empty statement */
;
Widget w;
{
widget_instance* instance = get_widget_instance (w, True);
-
+
if (instance)
{
widget_info *info = instance->info;
}
static void
+#ifdef PROTOTYPES
+lw_pop_all_widgets (LWLIB_ID id, Boolean up)
+#else
lw_pop_all_widgets (id, up)
LWLIB_ID id;
Boolean up;
+#endif
{
widget_info* info = get_widget_info (id, False);
widget_instance* instance;
xm_pop_instance (instance, up);
}
#endif
-#if defined (USE_OLIT)
- if (lw_olit_widget_p (instance->widget))
- {
- XtRealizeWidget (instance->widget);
- xol_pop_instance (instance, up);
- }
-#endif
#if defined (USE_XAW)
if (lw_xaw_widget_p (instance->widget))
{
if (lw_motif_widget_p (widget))
xm_popup_menu (widget, event);
#endif
-#if defined (USE_OLIT)
- if (lw_olit_widget_p (widget))
- xol_popup_menu (widget, event);
-#endif
#if defined (USE_XAW)
if (lw_xaw_widget_p (widget))
xaw_popup_menu (widget, event);
widget_value* val;
{
Widget widget = name_to_widget (instance, val->name);
-
+
if (widget)
{
#if defined (USE_LUCID)
if (lw_motif_widget_p (instance->widget))
xm_update_one_value (instance, widget, val);
#endif
-#if defined (USE_OLIT)
- if (lw_olit_widget_p (instance->widget))
- xol_update_one_value (instance, widget, val);
-#endif
#if defined (USE_XAW)
if (lw_xaw_widget_p (instance->widget))
xaw_update_one_value (instance, widget, val);
/* To forbid recursive calls */
static Boolean lwlib_updating;
-/* This function can be used as a an XtCallback for the widgets that get
+/* This function can be used as a an XtCallback for the widgets that get
modified to update other instances of the widgets. Closure should be the
widget_instance. */
void
\f/* Show busy */
static void
+#ifdef PROTOTYPES
+show_one_widget_busy (Widget w, Boolean flag)
+#else
show_one_widget_busy (w, flag)
Widget w;
Boolean flag;
+#endif
{
Pixel foreground = 0;
Pixel background = 1;
Widget widget_to_invert = XtNameToWidget (w, "*sheet");
if (!widget_to_invert)
widget_to_invert = w;
-
+
XtVaGetValues (widget_to_invert,
XtNforeground, &foreground,
XtNbackground, &background,
- 0);
+ NULL);
XtVaSetValues (widget_to_invert,
XtNforeground, background,
XtNbackground, foreground,
- 0);
+ NULL);
}
void
+#ifdef PROTOTYPES
+lw_show_busy (Widget w, Boolean busy)
+#else
lw_show_busy (w, busy)
Widget w;
Boolean busy;
+#endif
{
widget_instance* instance = get_widget_instance (w, False);
widget_info* info;
/* This hack exists because Lucid/Athena need to execute the strange
function below to support geometry management. */
void
+#ifdef PROTOTYPES
+lw_refigure_widget (Widget w, Boolean doit)
+#else
lw_refigure_widget (w, doit)
Widget w;
Boolean doit;
+#endif
{
-#if defined (USE_XAW)
+#if defined (USE_XAW)
XawPanedSetRefigureMode (w, doit);
#endif
#if defined (USE_MOTIF)
/* Manage resizing for Motif. This disables resizing when the menubar
is about to be modified. */
void
+#ifdef PROTOTYPES
+lw_allow_resizing (Widget w, Boolean flag)
+#else
lw_allow_resizing (w, flag)
Widget w;
Boolean flag;
+#endif
{
#if defined (USE_MOTIF)
xm_manage_resizing (w, flag);
enum menu_separator *type;
int motif_p;
{
- int separator_p;
+ int separator_p = 0;
if (strlen (label) >= 3
&& bcmp (label, "--:", 3) == 0)
}
separator_names[] =
{
- "space", SEPARATOR_NO_LINE,
- "noLine", SEPARATOR_NO_LINE,
- "singleLine", SEPARATOR_SINGLE_LINE,
- "doubleLine", SEPARATOR_DOUBLE_LINE,
- "singleDashedLine", SEPARATOR_SINGLE_DASHED_LINE,
- "doubleDashedLine", SEPARATOR_DOUBLE_DASHED_LINE,
- "shadowEtchedIn", SEPARATOR_SHADOW_ETCHED_IN,
- "shadowEtchedOut", SEPARATOR_SHADOW_ETCHED_OUT,
- "shadowEtchedInDash", SEPARATOR_SHADOW_ETCHED_IN_DASH,
- "shadowEtchedOutDash", SEPARATOR_SHADOW_ETCHED_OUT_DASH,
- "shadowDoubleEtchedIn", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
- "shadowDoubleEtchedOut", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
- "shadowDoubleEtchedInDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
- "shadowDoubleEtchedOutDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH,
- 0
+ {"space", SEPARATOR_NO_LINE},
+ {"noLine", SEPARATOR_NO_LINE},
+ {"singleLine", SEPARATOR_SINGLE_LINE},
+ {"doubleLine", SEPARATOR_DOUBLE_LINE},
+ {"singleDashedLine", SEPARATOR_SINGLE_DASHED_LINE},
+ {"doubleDashedLine", SEPARATOR_DOUBLE_DASHED_LINE},
+ {"shadowEtchedIn", SEPARATOR_SHADOW_ETCHED_IN},
+ {"shadowEtchedOut", SEPARATOR_SHADOW_ETCHED_OUT},
+ {"shadowEtchedInDash", SEPARATOR_SHADOW_ETCHED_IN_DASH},
+ {"shadowEtchedOutDash", SEPARATOR_SHADOW_ETCHED_OUT_DASH},
+ {"shadowDoubleEtchedIn", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN},
+ {"shadowDoubleEtchedOut", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT},
+ {"shadowDoubleEtchedInDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH},
+ {"shadowDoubleEtchedOutDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH},
+ {0,0}
};
int i;
}
separator_names[] =
{
- "space", SEPARATOR_NO_LINE,
- "no-line", SEPARATOR_NO_LINE,
- "single-line", SEPARATOR_SINGLE_LINE,
- "double-line", SEPARATOR_DOUBLE_LINE,
- "single-dashed-line", SEPARATOR_SINGLE_DASHED_LINE,
- "double-dashed-line", SEPARATOR_DOUBLE_DASHED_LINE,
- "shadow-etched-in", SEPARATOR_SHADOW_ETCHED_IN,
- "shadow-etched-out", SEPARATOR_SHADOW_ETCHED_OUT,
- "shadow-etched-in-dash", SEPARATOR_SHADOW_ETCHED_IN_DASH,
- "shadow-etched-out-dash", SEPARATOR_SHADOW_ETCHED_OUT_DASH,
- "shadow-double-etched-in", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
- "shadow-double-etched-out", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
- "shadow-double-etched-in-dash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
- "shadow-double-etched-out-dash",SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH,
- 0
+ {"space", SEPARATOR_NO_LINE},
+ {"no-line", SEPARATOR_NO_LINE},
+ {"single-line", SEPARATOR_SINGLE_LINE},
+ {"double-line", SEPARATOR_DOUBLE_LINE},
+ {"single-dashed-line", SEPARATOR_SINGLE_DASHED_LINE},
+ {"double-dashed-line", SEPARATOR_DOUBLE_DASHED_LINE},
+ {"shadow-etched-in", SEPARATOR_SHADOW_ETCHED_IN},
+ {"shadow-etched-out", SEPARATOR_SHADOW_ETCHED_OUT},
+ {"shadow-etched-in-dash", SEPARATOR_SHADOW_ETCHED_IN_DASH},
+ {"shadow-etched-out-dash", SEPARATOR_SHADOW_ETCHED_OUT_DASH},
+ {"shadow-double-etched-in", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN},
+ {"shadow-double-etched-out", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT},
+ {"shadow-double-etched-in-dash", SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH},
+ {"shadow-double-etched-out-dash",SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH},
+ {0,0}
};
int i;
return separator_p;
}
+/* arch-tag: 3d730f36-a441-4a71-9971-48ef3b5a4d9f
+ (do not change this comment) */