Mercurial > emacs
view lwlib/lwlib-Xol.c @ 43882:e601e469e7a4
(fortran-mode): Set comment-padding to "$$$".
Add fortran-comment-line-start-skip to comment-start-skip.
(fortran-comment-indent): Keep whole-line comments in column 0.
(fortran-find-comment-start-skip): New arg `all'.
If ALL is nil, make sure we only match comment-start-skip if we
can't match fortran-comment-line-start-skip.
Fix bug that made it return t but without moving point when
matching '!'! (a false-comment followed by a real comment).
(fortran-indent-comment): Use new `all' argument above.
Be careful not to add an incorrect comment-starter like "C"
in comment-column.
(fortran-split-line): When splitting a comment, reuse the comment
starter from the current line rather than fortran-comment-line-start.
(fortran-indent-line, fortran-auto-fill): Simplify thanks to the
cleaner behavior of fortran-find-comment-start-skip.
(fortran-fill): Don't be confused by ! inside a comment.
(fortran-break-line): Minor cleanup and simplification.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 13 Mar 2002 16:33:56 +0000 |
parents | 7fb1caba0f51 |
children |
line wrap: on
line source
#include "../src/lisp.h" #include "lwlib-Xol.h" #include <X11/StringDefs.h> #include <X11/IntrinsicP.h> #include <X11/CompositeP.h> #include <X11/Shell.h> #include <Xol/Menu.h> #include <Xol/OpenLook.h> #include <Xol/MenuButton.h> #include <Xol/OblongButt.h> #include <Xol/ControlAre.h> #include <Xol/Stub.h> #include <Xol/StaticText.h> /* forward declarations */ static void update_menu_widget (widget_instance* instance, Widget widget, widget_value* val); /* Menu callbacks */ static void pre_hook (Widget w, caddr_t client_data, caddr_t call_data) { OlVirtualEvent ve = (OlVirtualEvent)call_data; widget_instance* instance = (widget_instance*)client_data; if (w->core.being_destroyed) return; if (XtParent (w) == instance->widget) { if (ve->xevent->type == ButtonPress && instance->info->pre_activate_cb) instance->info->pre_activate_cb (instance->widget, instance->info->id, NULL); } } static void post_hook (Widget w, caddr_t client_data, caddr_t call_data) { widget_instance* instance = (widget_instance*)client_data; if (w->core.being_destroyed) return; if (instance->info->post_activate_cb) instance->info->post_activate_cb (w, instance->info->id, NULL); } static void pick_hook (Widget w, caddr_t client_data, caddr_t call_data) { widget_instance* instance = 0; widget_value* val = (widget_value*)client_data; if (w->core.being_destroyed) return; XtVaGetValues (w, XtNuserData, &instance, 0); if (!instance) return; if (instance->info->selection_cb && val && val->enabled && !val->contents) instance->info->selection_cb (w, instance->info->id, val->call_data); } /* creation functions */ static Widget xol_create_menubar (widget_instance* instance) { Widget widget = XtVaCreateWidget (instance->info->name, controlAreaWidgetClass, instance->parent, 0); return widget; } static Widget xol_create_popup_menu (widget_instance* instance) { Widget popup_shell = XtCreatePopupShell (instance->info->name, menuShellWidgetClass, instance->parent, NULL, 0); return popup_shell; } widget_creation_entry xol_creation_table [] = { {"menubar", xol_create_menubar}, {"popup", xol_create_popup_menu}, {NULL, NULL} }; Widget xol_create_dialog (widget_instance* instance) { return NULL; } Boolean lw_olit_widget_p (Widget widget) { return True; } /* update functions */ static void destroy_all_children (Widget widget) { Widget* children; unsigned int number; int i; children = (Widget *) XtCompositeChildren (widget, &number); if (children) { /* Unmanage all children and destroy them. They will only be * really destroyed when we get out of DispatchEvent. */ for (i = 0; i < number; i++) { Widget child = children [i]; if (!child->core.being_destroyed) { XtUnmanageChild (child); XtDestroyWidget (child); } } XtFree (children); } } static Boolean all_dashes_p (char* s) { char* t; for (t = s; *t; t++) if (*t != '-') return False; return True; } static void make_menu_in_widget (widget_instance* instance, Widget widget, widget_value* val) { widget_value* cur; Widget button; Arg al [256]; int ac; String label; for (cur = val; cur; cur = cur->next) { ac = 0; XtSetArg (al [ac], XtNsensitive, cur->enabled); ac++; XtSetArg (al [ac], XtNuserData, instance); ac++; XtSetArg (al [ac], XtNacceleratorText, cur->key); ac++; /* label = (char *) resource_string (widget, cur->name);*/ label = cur->name; if (label) { XtSetArg (al [ac], XtNlabel, label); ac++; } if (all_dashes_p (cur->name)) { /* no separator in OpenLook just make some space. */ XtSetArg (al [ac], XtNheight, 5); ac++; XtSetArg (al [ac], XtNwidth, 5); ac++; button = XtCreateWidget (cur->name, stubWidgetClass, widget, al, ac); } else if (!cur->contents) { if (!cur->call_data) button = XtCreateManagedWidget (cur->name, staticTextWidgetClass, widget, al, ac); else { button = XtCreateManagedWidget (cur->name, oblongButtonWidgetClass, widget, al, ac); XtAddCallback (button, XtNselect, pick_hook, cur); } } else { Widget menu = NULL; button = XtCreateManagedWidget (cur->name, menuButtonWidgetClass, widget, al, ac); XtVaGetValues (button, XtNmenuPane, &menu, 0); if (!menu) abort (); make_menu_in_widget (instance, menu, cur->contents); OlAddCallback (button, XtNconsumeEvent, pre_hook, instance); } } } static void update_one_menu_entry (widget_instance* instance, Widget widget, widget_value* val) { Arg al [256]; int ac; Widget menu; widget_value* contents; if (val->change == NO_CHANGE) return; /* update the sensitivity */ XtVaSetValues (widget, XtNsensitive, val->enabled, 0); /* update the pulldown/pullaside as needed */ ac = 0; menu = NULL; XtVaGetValues (widget, XtNmenuPane, &menu, 0); contents = val->contents; if (!menu) { if (contents) { /* in OLIT this would have to be a structural change on the button. */ abort (); } } else if (!contents) { /* in OLIT this would have to be a structural change on the button. */ abort (); } else if (contents->change != NO_CHANGE) update_menu_widget (instance, menu, val); } static void update_menu_widget (widget_instance* instance, Widget widget, widget_value* val) { if (val->change == STRUCTURAL_CHANGE || val->contents->change == STRUCTURAL_CHANGE) { destroy_all_children (widget); make_menu_in_widget (instance, widget, val->contents); } else { /* Update all the buttons of the composite widget in order. */ Widget* children; unsigned int num_children; int i; widget_value* cur; children = (Widget *) XtCompositeChildren (widget, &num_children); if (children) { for (i = 0, cur = val->contents; i < num_children; i++) { if (!cur) abort (); if (children [i]->core.being_destroyed || strcmp (XtName (children [i]), cur->name)) continue; update_one_menu_entry (instance, children [i], cur); cur = cur->next; } XtFree (children); } if (cur) abort (); } } void xol_update_one_widget (widget_instance* instance, Widget widget, widget_value* val, Boolean deep_p) { Widget menu = widget; if (XtIsShell (widget)) XtVaGetValues (widget, XtNmenuPane, &menu, 0); update_menu_widget (instance, menu, val); } void xol_update_one_value (widget_instance* instance, Widget widget, widget_value* val) { return; } void xol_pop_instance (widget_instance* instance, Boolean up) { } void xol_popup_menu (Widget widget) { OlMenuPost (widget); } /* Destruction of instances */ void xol_destroy_instance (widget_instance* instance) { XtDestroyWidget (instance->widget); }