X-Git-Url: http://git.chise.org/gitweb/?p=chise%2Fxemacs-chise.git.1;a=blobdiff_plain;f=src%2Ftoolbar-x.c;h=61e7a18b277c610b8f43eeb93e7b26a34171777c;hp=64f2b6cc8d0edacb7dd3fac7142be373480b52e4;hb=4722bc54af41d050cb2bf24670d152f3fb0547b7;hpb=59eec5f21669e81977b5b1fe9bf717cab49cf7fb diff --git a/src/toolbar-x.c b/src/toolbar-x.c index 64f2b6c..61e7a18 100644 --- a/src/toolbar-x.c +++ b/src/toolbar-x.c @@ -225,8 +225,8 @@ x_output_toolbar_button (struct frame *f, Lisp_Object button) WINDOW_FACE_CACHEL (w, DEFAULT_INDEX); struct display_line dl; Lisp_Object string = IMAGE_INSTANCE_TEXT_STRING (p); - unsigned char charsets[NUM_LEADING_BYTES]; - Emchar_dynarr *buf; + Charset_ID charsets[NUM_LEADING_BYTES]; + Charc_dynarr *buf; struct font_metric_info fm; /* This could be true if we were called via the Expose event @@ -238,11 +238,11 @@ x_output_toolbar_button (struct frame *f, Lisp_Object button) MARK_TOOLBAR_CHANGED; return; } - buf = Dynarr_new (Emchar); - convert_bufbyte_string_into_emchar_dynarr + buf = Dynarr_new (Charc); + convert_bufbyte_string_into_charc_dynarr (XSTRING_DATA (string), XSTRING_LENGTH (string), buf); - find_charsets_in_emchar_string (charsets, Dynarr_atp (buf, 0), - Dynarr_length (buf)); + find_charsets_in_charc_string (charsets, Dynarr_atp (buf, 0), + Dynarr_length (buf)); ensure_face_cachel_complete (cachel, window, charsets); face_cachel_charset_font_metric_info (cachel, charsets, &fm); @@ -348,7 +348,8 @@ x_get_button_size (struct frame *f, Lisp_Object window, || tb->y != y \ || tb->width != width \ || tb->height != height \ - || tb->dirty) \ + || tb->dirty \ + || f->clear) /* This is clearly necessary. */ \ { \ if (width && height) \ { \ @@ -400,7 +401,7 @@ x_get_button_size (struct frame *f, Lisp_Object window, (frame)->right_toolbar_was_visible = flag; \ break; \ default: \ - abort (); \ + ABORT (); \ } \ } while (0) @@ -557,22 +558,30 @@ x_output_frame_toolbars (struct frame *f) if (FRAME_REAL_TOP_TOOLBAR_VISIBLE (f)) x_output_toolbar (f, TOP_TOOLBAR); - else if (f->top_toolbar_was_visible) - x_clear_toolbar (f, TOP_TOOLBAR, 0); - if (FRAME_REAL_BOTTOM_TOOLBAR_VISIBLE (f)) x_output_toolbar (f, BOTTOM_TOOLBAR); - else if (f->bottom_toolbar_was_visible) - x_clear_toolbar (f, BOTTOM_TOOLBAR, 0); - if (FRAME_REAL_LEFT_TOOLBAR_VISIBLE (f)) x_output_toolbar (f, LEFT_TOOLBAR); - else if (f->left_toolbar_was_visible) - x_clear_toolbar (f, LEFT_TOOLBAR, 0); - if (FRAME_REAL_RIGHT_TOOLBAR_VISIBLE (f)) x_output_toolbar (f, RIGHT_TOOLBAR); - else if (f->right_toolbar_was_visible) +} + +static void +x_clear_frame_toolbars (struct frame *f) +{ + assert (FRAME_X_P (f)); + + if (f->top_toolbar_was_visible + && !FRAME_REAL_TOP_TOOLBAR_VISIBLE (f)) + x_clear_toolbar (f, TOP_TOOLBAR, 0); + if (f->bottom_toolbar_was_visible + && !FRAME_REAL_BOTTOM_TOOLBAR_VISIBLE (f)) + x_clear_toolbar (f, BOTTOM_TOOLBAR, 0); + if (f->left_toolbar_was_visible + && !FRAME_REAL_LEFT_TOOLBAR_VISIBLE (f)) + x_clear_toolbar (f, LEFT_TOOLBAR, 0); + if (f->right_toolbar_was_visible + && !FRAME_REAL_RIGHT_TOOLBAR_VISIBLE (f)) x_clear_toolbar (f, RIGHT_TOOLBAR, 0); } @@ -793,6 +802,7 @@ void console_type_create_toolbar_x (void) { CONSOLE_HAS_METHOD (x, output_frame_toolbars); + CONSOLE_HAS_METHOD (x, clear_frame_toolbars); CONSOLE_HAS_METHOD (x, initialize_frame_toolbars); CONSOLE_HAS_METHOD (x, free_frame_toolbars); CONSOLE_HAS_METHOD (x, output_toolbar_button);