aboutsummaryrefslogtreecommitdiffstats
path: root/src/term.c
diff options
context:
space:
mode:
authorEli Zaretskii2013-09-17 15:47:37 +0300
committerEli Zaretskii2013-09-17 15:47:37 +0300
commitffc3882f6ceca6c1516d5dda6f719bbaed1fa7df (patch)
treed2413e69344ca46602a136a29f91e3112b96a12a /src/term.c
parent5877bb8d7e55eda3f81a36bfabe4dd816a34269f (diff)
downloademacs-ffc3882f6ceca6c1516d5dda6f719bbaed1fa7df.tar.gz
emacs-ffc3882f6ceca6c1516d5dda6f719bbaed1fa7df.zip
Minor fixes to interfaces, avoid assertion violation under GLYPH_DEBUG.
Diffstat (limited to 'src/term.c')
-rw-r--r--src/term.c37
1 files changed, 28 insertions, 9 deletions
diff --git a/src/term.c b/src/term.c
index f3a750c70b6..f27bf8d900d 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2900,7 +2900,7 @@ tty_menu_calc_size (tty_menu *menu, int *width, int *height)
2900/* Display MENU at (X,Y) using FACES. */ 2900/* Display MENU at (X,Y) using FACES. */
2901 2901
2902static void 2902static void
2903tty_menu_display (tty_menu *menu, int y, int x, int pn, int *faces, 2903tty_menu_display (tty_menu *menu, int x, int y, int pn, int *faces,
2904 int disp_help) 2904 int disp_help)
2905{ 2905{
2906 int i, face, width, mx = -1, my = -1, enabled, mousehere, row, col; 2906 int i, face, width, mx = -1, my = -1, enabled, mousehere, row, col;
@@ -2958,7 +2958,7 @@ tty_menu_display (tty_menu *menu, int y, int x, int pn, int *faces,
2958 menu_help_paneno = pn - 1; 2958 menu_help_paneno = pn - 1;
2959 menu_help_itemno = i; 2959 menu_help_itemno = i;
2960 } 2960 }
2961 display_tty_menu_item (menu->text[i], face, y + i, x, 2961 display_tty_menu_item (menu->text[i], face, x, y + i,
2962 menu->submenu[i] != NULL); 2962 menu->submenu[i] != NULL);
2963 } 2963 }
2964 update_frame_with_menu (sf); 2964 update_frame_with_menu (sf);
@@ -3139,10 +3139,17 @@ screen_update (struct frame *f, struct glyph_matrix *mtx)
3139 puts us. We only consider mouse movement and click events and 3139 puts us. We only consider mouse movement and click events and
3140 keyboard movement commands; the rest are ignored. */ 3140 keyboard movement commands; the rest are ignored. */
3141static void 3141static void
3142read_menu_input (int *x, int *y) 3142read_menu_input (struct frame *sf, int *x, int *y, bool *first_time)
3143{ 3143{
3144 Lisp_Object c; 3144 Lisp_Object c;
3145 3145
3146 if (*first_time)
3147 {
3148 *first_time = false;
3149 sf->mouse_moved = 1;
3150 return;
3151 }
3152
3146 while (1) 3153 while (1)
3147 { 3154 {
3148 do { 3155 do {
@@ -3174,7 +3181,10 @@ read_menu_input (int *x, int *y)
3174 break; 3181 break;
3175 } 3182 }
3176 if (usable_input) 3183 if (usable_input)
3177 return; 3184 {
3185 sf->mouse_moved = 1;
3186 return;
3187 }
3178 } 3188 }
3179 3189
3180 else if (EVENT_HAS_PARAMETERS (c)) 3190 else if (EVENT_HAS_PARAMETERS (c))
@@ -3232,6 +3242,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3232 int title_faces[4]; /* face to display the menu title */ 3242 int title_faces[4]; /* face to display the menu title */
3233 int faces[4], buffers_num_deleted = 0; 3243 int faces[4], buffers_num_deleted = 0;
3234 struct frame *sf = SELECTED_FRAME (); 3244 struct frame *sf = SELECTED_FRAME ();
3245 bool first_time;
3235 Lisp_Object saved_echo_area_message, selectface; 3246 Lisp_Object saved_echo_area_message, selectface;
3236 3247
3237 /* Don't allow non-positive x0 and y0, lest the menu will wrap 3248 /* Don't allow non-positive x0 and y0, lest the menu will wrap
@@ -3298,8 +3309,11 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3298 show_cursor (0); /* FIXME: need a new hook, for w32console. */ 3309 show_cursor (0); /* FIXME: need a new hook, for w32console. */
3299#endif 3310#endif
3300 3311
3301 /* Display the menu title. */ 3312 /* Display the menu title. We subtract 1 from x0 and y0 because we
3302 tty_menu_display (menu, y0 - 1, x0 - 1, 1, title_faces, 0); 3313 want to interpret them as zero-based column and row coordinates,
3314 and also because we want the first item of the menu, not its
3315 title, to appear at x0,y0. */
3316 tty_menu_display (menu, x0 - 1, y0 - 1, 1, title_faces, 0);
3303 if (buffers_num_deleted) 3317 if (buffers_num_deleted)
3304 menu->text[0][7] = ' '; 3318 menu->text[0][7] = ' ';
3305 if ((onepane = menu->count == 1 && menu->submenu[0])) 3319 if ((onepane = menu->count == 1 && menu->submenu[0]))
@@ -3317,6 +3331,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3317 3331
3318 x = state[0].x; 3332 x = state[0].x;
3319 y = state[0].y; 3333 y = state[0].y;
3334 first_time = true;
3320 3335
3321 leave = 0; 3336 leave = 0;
3322 while (!leave) 3337 while (!leave)
@@ -3324,7 +3339,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3324 int mouse_button_count = 3; /* FIXME */ 3339 int mouse_button_count = 3; /* FIXME */
3325 3340
3326 if (!mouse_visible) mouse_on (); 3341 if (!mouse_visible) mouse_on ();
3327 read_menu_input (&x, &y); 3342 read_menu_input (sf, &x, &y, &first_time);
3328 if (sf->mouse_moved) 3343 if (sf->mouse_moved)
3329 { 3344 {
3330 sf->mouse_moved = 0; 3345 sf->mouse_moved = 0;
@@ -3359,8 +3374,8 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3359 if (i == statecount - 1 && state[i].menu->submenu[dy]) 3374 if (i == statecount - 1 && state[i].menu->submenu[dy])
3360 { 3375 {
3361 tty_menu_display (state[i].menu, 3376 tty_menu_display (state[i].menu,
3362 state[i].y,
3363 state[i].x, 3377 state[i].x,
3378 state[i].y,
3364 state[i].pane, 3379 state[i].pane,
3365 faces, 1); 3380 faces, 1);
3366 state[statecount].menu = state[i].menu->submenu[dy]; 3381 state[statecount].menu = state[i].menu->submenu[dy];
@@ -3376,8 +3391,8 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3376 } 3391 }
3377 } 3392 }
3378 tty_menu_display (state[statecount - 1].menu, 3393 tty_menu_display (state[statecount - 1].menu,
3379 state[statecount - 1].y,
3380 state[statecount - 1].x, 3394 state[statecount - 1].x,
3395 state[statecount - 1].y,
3381 state[statecount - 1].pane, 3396 state[statecount - 1].pane,
3382 faces, 1); 3397 faces, 1);
3383 } 3398 }
@@ -3413,6 +3428,9 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3413 } 3428 }
3414 3429
3415 mouse_off (); /* FIXME */ 3430 mouse_off (); /* FIXME */
3431 sf->mouse_moved = 0;
3432 /* FIXME: Since we set the fram's garbaged flag, do we need this
3433 call to screen_update? */
3416 screen_update (sf, state[0].screen_behind); 3434 screen_update (sf, state[0].screen_behind);
3417 state[0].screen_behind = NULL; 3435 state[0].screen_behind = NULL;
3418#if 0 3436#if 0
@@ -3457,6 +3475,7 @@ tty_menu_activate (tty_menu *menu, int *pane, int *selidx,
3457 /* Allow mouse events generation by dos_rawgetc. */ 3475 /* Allow mouse events generation by dos_rawgetc. */
3458 mouse_preempted--; 3476 mouse_preempted--;
3459#endif 3477#endif
3478 SET_FRAME_GARBAGED (sf);
3460 return result; 3479 return result;
3461} 3480}
3462 3481