Mercurial > hg > xemacs-beta
annotate src/frame-tty.c @ 5008:cad59a0a3b19
Add license information from Marcus Thiessel.
See xemacs-beta message <20100208091453.25900@gmx.net>.
| author | Jerry James <james@xemacs.org> |
|---|---|
| date | Tue, 09 Feb 2010 09:50:49 -0700 |
| parents | e34711681f30 |
| children | 308d34e9f07d |
| rev | line source |
|---|---|
| 428 | 1 /* TTY frame functions. |
| 771 | 2 Copyright (C) 1995, 1997 Free Software Foundation, Inc. |
| 3 Copyright (C) 1995, 1996, 2002 Ben Wing. | |
| 428 | 4 |
| 5 This file is part of XEmacs. | |
| 6 | |
| 7 XEmacs is free software; you can redistribute it and/or modify it | |
| 8 under the terms of the GNU General Public License as published by the | |
| 9 Free Software Foundation; either version 2, or (at your option) any | |
| 10 later version. | |
| 11 | |
| 12 XEmacs is distributed in the hope that it will be useful, but WITHOUT | |
| 13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
| 14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
| 15 for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with XEmacs; see the file COPYING. If not, write to | |
| 19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| 20 Boston, MA 02111-1307, USA. */ | |
| 21 | |
| 22 /* Synched up with: Not in FSF. */ | |
| 23 | |
| 24 /* Written by Ben Wing. | |
| 25 Multi-frame support added by Hrvoje Niksic. */ | |
| 26 | |
| 27 #include <config.h> | |
| 28 #include "lisp.h" | |
| 29 | |
| 872 | 30 #include "device-impl.h" |
| 800 | 31 #include "events.h" |
| 872 | 32 #include "frame-impl.h" |
| 428 | 33 |
| 872 | 34 #include "console-tty-impl.h" |
| 428 | 35 |
| 36 | |
| 37 /* Default properties to use when creating frames. */ | |
| 38 Lisp_Object Vdefault_tty_frame_plist; | |
| 39 | |
|
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
40 Lisp_Object Qframe_number, Qmake_frame_after_init_entry_point; |
| 771 | 41 |
| 428 | 42 static void tty_raise_frame (struct frame *); |
| 43 | |
| 44 | |
| 45 static void | |
| 2286 | 46 tty_init_frame_1 (struct frame *f, Lisp_Object UNUSED (props), |
| 771 | 47 int frame_name_is_defaulted) |
| 428 | 48 { |
| 49 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
| 50 struct console *c = XCONSOLE (DEVICE_CONSOLE (d)); | |
| 51 | |
| 52 ++CONSOLE_TTY_DATA (c)->frame_count; | |
| 53 f->order_count = CONSOLE_TTY_DATA (c)->frame_count; | |
| 54 f->height = CONSOLE_TTY_DATA (c)->height; | |
| 55 f->width = CONSOLE_TTY_DATA (c)->width; | |
| 771 | 56 if (frame_name_is_defaulted) |
| 57 f->name = emacs_sprintf_string ("F%d", f->order_count); | |
| 428 | 58 } |
| 59 | |
| 60 static void | |
| 61 tty_init_frame_3 (struct frame *f) | |
| 62 { | |
| 63 tty_raise_frame (f); | |
| 64 } | |
| 65 | |
| 66 static void | |
| 67 tty_select_frame_if_unhidden (Lisp_Object frame) | |
| 68 { | |
| 69 if (FRAME_REPAINT_P (XFRAME (frame))) | |
| 70 select_frame_1 (frame); | |
| 71 } | |
| 72 | |
| 73 static void | |
| 74 tty_schedule_frame_select (struct frame *f) | |
| 75 { | |
| 793 | 76 Lisp_Object frame = wrap_frame (f); |
| 428 | 77 |
| 78 enqueue_magic_eval_event (tty_select_frame_if_unhidden, frame); | |
| 79 } | |
| 80 | |
| 81 static void | |
| 2286 | 82 tty_after_init_frame (struct frame *f, int UNUSED (first_on_device), |
| 428 | 83 int first_on_console) |
| 84 { | |
| 85 if (first_on_console) | |
|
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
86 call1 (Qmake_frame_after_init_entry_point, FRAME_CONSOLE (f)); |
| 428 | 87 } |
| 88 | |
| 89 /* Change from withdrawn state to mapped state. */ | |
| 90 static void | |
| 91 tty_make_frame_visible (struct frame *f) | |
| 92 { | |
| 771 | 93 if (!FRAME_VISIBLE_P (f)) |
| 428 | 94 { |
| 95 f->visible = -1; | |
| 96 } | |
| 97 } | |
| 98 | |
| 99 /* Change from mapped state to withdrawn state. */ | |
| 100 static void | |
| 101 tty_make_frame_invisible (struct frame *f) | |
| 102 { | |
| 103 f->visible = 0; | |
| 104 } | |
| 105 | |
| 106 static void | |
| 107 tty_make_frame_hidden (struct frame *f) | |
| 108 { | |
| 109 f->visible = -1; | |
| 110 } | |
| 111 | |
| 112 static void | |
| 113 tty_make_frame_unhidden (struct frame *f) | |
| 114 { | |
| 771 | 115 if (!FRAME_REPAINT_P (f)) |
| 428 | 116 { |
| 771 | 117 SET_FRAME_CLEAR (f); |
| 428 | 118 f->visible = 1; |
| 119 } | |
| 120 } | |
| 121 | |
| 122 static int | |
| 123 tty_frame_visible_p (struct frame *f) | |
| 124 { | |
| 125 return FRAME_VISIBLE_P (f); | |
| 126 } | |
| 127 | |
| 128 static void | |
| 129 tty_raise_frame_no_select (struct frame *f) | |
| 130 { | |
| 131 LIST_LOOP_2 (frame, DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f)))) | |
| 132 { | |
| 133 struct frame *o = XFRAME (frame); | |
| 134 if (o != f && FRAME_REPAINT_P (o)) | |
| 135 { | |
| 136 tty_make_frame_hidden (o); | |
| 137 break; | |
| 138 } | |
| 139 } | |
| 140 tty_make_frame_unhidden (f); | |
| 141 } | |
| 142 | |
| 143 static void | |
| 144 tty_raise_frame (struct frame *f) | |
| 145 { | |
| 146 tty_raise_frame_no_select (f); | |
| 147 tty_schedule_frame_select (f); | |
| 148 } | |
| 149 | |
| 150 static void | |
| 151 tty_lower_frame (struct frame *f) | |
| 152 { | |
| 153 Lisp_Object frame_list = DEVICE_FRAME_LIST (XDEVICE (FRAME_DEVICE (f))); | |
| 3025 | 154 Lisp_Object tail, new_; |
| 428 | 155 |
| 156 if (!FRAME_REPAINT_P (f)) | |
| 157 return; | |
| 158 | |
| 159 LIST_LOOP (tail, frame_list) | |
| 160 { | |
| 161 if (f == XFRAME (XCAR (tail))) | |
| 162 break; | |
| 163 } | |
| 164 | |
| 165 /* To lower this frame, another frame has to be raised. Return if | |
| 166 there is no other frame. */ | |
| 771 | 167 if (NILP (tail) && EQ (frame_list, tail)) |
| 428 | 168 return; |
| 169 | |
| 170 tty_make_frame_hidden (f); | |
| 171 if (CONSP (XCDR (tail))) | |
| 3025 | 172 new_ = XCAR (XCDR (tail)); |
| 428 | 173 else |
| 3025 | 174 new_ = XCAR (frame_list); |
| 175 tty_make_frame_unhidden (XFRAME (new_)); | |
| 176 tty_schedule_frame_select (XFRAME (new_)); | |
| 428 | 177 } |
| 178 | |
| 179 static void | |
| 180 tty_delete_frame (struct frame *f) | |
| 181 { | |
| 182 struct device *d = XDEVICE (FRAME_DEVICE (f)); | |
| 183 | |
| 184 if (!NILP (DEVICE_SELECTED_FRAME (d))) | |
| 185 tty_raise_frame (XFRAME (DEVICE_SELECTED_FRAME (d))); | |
| 186 } | |
| 771 | 187 |
| 188 static Lisp_Object | |
| 189 tty_frame_property (struct frame *f, Lisp_Object property) | |
| 190 { | |
| 191 if (EQ (Qframe_number, property)) | |
| 192 return make_int (f->order_count); | |
| 193 | |
| 194 return Qunbound; | |
| 195 } | |
| 196 | |
| 197 static int | |
| 2286 | 198 tty_internal_frame_property_p (struct frame *UNUSED (f), Lisp_Object property) |
| 771 | 199 { |
| 200 return EQ (property, Qframe_number); | |
| 201 } | |
| 202 | |
| 203 static Lisp_Object | |
| 204 tty_frame_properties (struct frame *f) | |
| 205 { | |
| 206 Lisp_Object props = Qnil; | |
| 207 | |
| 208 props = cons3 (Qframe_number, make_int (f->order_count), props); | |
| 209 | |
| 210 return props; | |
| 211 } | |
| 428 | 212 |
| 213 /************************************************************************/ | |
| 214 /* initialization */ | |
| 215 /************************************************************************/ | |
| 216 | |
| 217 void | |
| 218 console_type_create_frame_tty (void) | |
| 219 { | |
| 220 CONSOLE_HAS_METHOD (tty, init_frame_1); | |
| 221 CONSOLE_HAS_METHOD (tty, init_frame_3); | |
| 222 CONSOLE_HAS_METHOD (tty, after_init_frame); | |
| 223 CONSOLE_HAS_METHOD (tty, make_frame_visible); | |
| 224 CONSOLE_HAS_METHOD (tty, make_frame_invisible); | |
| 225 CONSOLE_HAS_METHOD (tty, frame_visible_p); | |
| 226 CONSOLE_HAS_METHOD (tty, raise_frame); | |
| 227 CONSOLE_HAS_METHOD (tty, lower_frame); | |
| 228 CONSOLE_HAS_METHOD (tty, delete_frame); | |
| 771 | 229 CONSOLE_HAS_METHOD (tty, frame_property); |
| 230 CONSOLE_HAS_METHOD (tty, internal_frame_property_p); | |
| 231 CONSOLE_HAS_METHOD (tty, frame_properties); | |
| 232 } | |
| 233 | |
| 234 void | |
| 235 syms_of_frame_tty (void) | |
| 236 { | |
| 237 DEFSYMBOL (Qframe_number); | |
|
4477
e34711681f30
Don't determine whether to call general device-type code at startup,
Aidan Kehoe <kehoea@parhasard.net>
parents:
3025
diff
changeset
|
238 DEFSYMBOL (Qmake_frame_after_init_entry_point); |
| 428 | 239 } |
| 240 | |
| 241 void | |
| 242 vars_of_frame_tty (void) | |
| 243 { | |
| 244 DEFVAR_LISP ("default-tty-frame-plist", &Vdefault_tty_frame_plist /* | |
| 245 Plist of default frame-creation properties for tty frames. | |
| 246 These are in addition to and override what is specified in | |
| 247 `default-frame-plist', but are overridden by the arguments to the | |
| 248 particular call to `make-frame'. | |
| 249 */ ); | |
| 250 Vdefault_tty_frame_plist = Qnil; | |
| 251 | |
| 252 tty_console_methods->device_specific_frame_props = | |
| 253 &Vdefault_tty_frame_plist; | |
| 254 | |
| 255 /* Tty frames are now supported. Advertise a feature to indicate this. */ | |
| 256 Fprovide (intern ("tty-frames")); | |
| 257 } |
