Mercurial > emacs
view lwlib/lwlib-Xol.c @ 25002:28d5af43eeb6
Rewritten.
(append_glyph): New.
(update_end): Turn cursor on only if selected window's
cursor_off_p flag is not set.
(TS_cursor_visible): Renamed from TS_visual_mode.
(TS_cursor_normal): Renamed from TS_end_visual_mode.
(TS_cursor_invisible): New.
(term_init): Initialize TS_cursor_invisible.
(tty_hide_cursor): New.
(tty_show_cursor): New.
(update_end): Show tty cursor.
(update_begin): Hide tty cursor to prevent cursor flickering
during redisplays triggered by timers (stealth fontification).
(estimate_mode_line_height): New.
(estimate_mode_line_height_hook): New.
(OUTPUT_IF): Make replacement text have statement form.
(OUTPUT1_IF): Ditto.
(TS_italic_mode, TS_end_italic_mode): Removed.
(TS_bold_mode): Removed.
(TS_underscore_mode, TS_end_underscore_mode): Removed.
(TS_enter_bold_mode, TS_enter_dim_mode, TS_enter_blink_mode): New.
(TS_enter_reverse_mode): New.
(TS_enter_underline_mode, TS_exit_underline_mode): New.
(TN_magic_cookie_glitch_ul): New.
(TS_enter_alt_charset_mode, TS_exit_alt_charset_mode): New.
(TS_exit_attribute_mode): New.
(TN_max_colors, TN_max_pairs, TS_orig_pairs): New.
(TS_set_foreground, TS_set_background): New.
(reset_terminal_modes): Switch colors back to default.
(write_glyphs): Turn face on before writing text, turn it off
afterwards.
(insert_glyphs): Ditto.
(term_init): Initialize new terminal capability variables.
(turn_on_face): Turn a face on.
(turn_off_face): Turn a face off.
(global): Rewrite for new glyphs.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Wed, 21 Jul 1999 21:43:52 +0000 |
parents | 0a94cd2c51c4 |
children | 7fb1caba0f51 |
line wrap: on
line source
#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); }