X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Ftoolbar-msw.c;h=5a4acfd7c412750260f974b79c133e73d31c8e0e;hb=59ca45fb82208b9758b0eb17b9ba670e5e53c240;hp=b9fa9591e8e6a4f01c7aa376d3b40612263badef;hpb=6883ee56ec887c2c48abe5b06b5e66aa74031910;p=chise%2Fxemacs-chise.git- diff --git a/src/toolbar-msw.c b/src/toolbar-msw.c index b9fa959..5a4acfd 100644 --- a/src/toolbar-msw.c +++ b/src/toolbar-msw.c @@ -59,6 +59,9 @@ GetDlgItem(FRAME_MSWINDOWS_HANDLE(f), TOOLBAR_ID_BIAS + p) #define MSWINDOWS_BLANK_SIZE 5 #define MSWINDOWS_MINIMUM_TOOLBAR_SIZE 8 +static void +mswindows_move_toolbar (struct frame *f, enum toolbar_pos pos); + #define SET_TOOLBAR_WAS_VISIBLE_FLAG(frame, pos, flag) \ do { \ switch (pos) \ @@ -87,7 +90,7 @@ allocate_toolbar_item_id (struct frame* f, struct toolbar_button* button, /* hmm what do we generate an id based on */ int id = TOOLBAR_ITEM_ID_BITS (internal_hash (button->callback, 0)); while (!NILP (Fgethash (make_int (id), - FRAME_MSWINDOWS_TOOLBAR_HASHTABLE (f), Qnil))) + FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f), Qnil))) { id = TOOLBAR_ITEM_ID_BITS (id + 1); } @@ -105,14 +108,14 @@ mswindows_clear_toolbar (struct frame *f, enum toolbar_pos pos, { TBBUTTON info; - /* delete the buttons and remove the command from the hashtable*/ + /* Delete the buttons and remove the command from the hash table*/ i = SendMessage (toolbarwnd, TB_BUTTONCOUNT, 0, 0); for (i--; i >= 0; i--) { SendMessage (toolbarwnd, TB_GETBUTTON, (WPARAM)i, (LPARAM)&info); Fremhash(make_int(info.idCommand), - FRAME_MSWINDOWS_TOOLBAR_HASHTABLE(f)); + FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE(f)); SendMessage (toolbarwnd, TB_DELETEBUTTON, (WPARAM)i, 0); } @@ -205,10 +208,11 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) { struct toolbar_button *tb = XTOOLBAR_BUTTON (button); - checksum = HASH4 (checksum, + checksum = HASH5 (checksum, internal_hash (get_toolbar_button_glyph(w, tb), 0), internal_hash (tb->callback, 0), - width); + width, + LISP_HASH (w->toolbar_buttons_captioned_p)); button = tb->next; nbuttons++; } @@ -262,7 +266,7 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) if (IMAGE_INSTANCE_PIXMAP_TYPE_P (p)) { - /* we are going to honour the toolbar settings + /* we are going to honor the toolbar settings and resize the bitmaps accordingly if they are too big. If they are too small we leave them and pad the difference - unless a different size @@ -293,7 +297,7 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) { xfree (button_tbl); if (ilist) ImageList_Destroy (ilist); - signal_simple_error ("couldn't resize pixmap", + signal_simple_error ("Couldn't resize pixmap", instance); } /* we don't care if the mask fails */ @@ -316,7 +320,7 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) nbuttons, nbuttons * 2 ))) { xfree (button_tbl); - signal_simple_error ("couldn't create image list", + signal_simple_error ("Couldn't create image list", instance); } @@ -343,7 +347,7 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) } Fputhash (make_int (tbbutton->idCommand), - button, FRAME_MSWINDOWS_TOOLBAR_HASHTABLE (f)); + button, FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f)); } /* now fix up the button size */ @@ -459,6 +463,9 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos) /* now display the window */ ShowWindow (toolbarwnd, SW_SHOW); + /* no idea why this is necessary but initial display will not + happen otherwise. */ + mswindows_move_toolbar (f, pos); if (button_tbl) xfree (button_tbl); @@ -524,6 +531,13 @@ mswindows_redraw_exposed_toolbars (struct frame *f, int x, int y, int width, } static void +mswindows_redraw_frame_toolbars (struct frame *f) +{ + mswindows_redraw_exposed_toolbars (f, 0, 0, FRAME_PIXWIDTH (f), + FRAME_PIXHEIGHT (f)); +} + +static void mswindows_initialize_frame_toolbars (struct frame *f) { @@ -582,7 +596,7 @@ Lisp_Object mswindows_get_toolbar_button_text ( struct frame* f, int command_id ) { Lisp_Object button = Fgethash (make_int (command_id), - FRAME_MSWINDOWS_TOOLBAR_HASHTABLE (f), Qnil); + FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f), Qnil); if (!NILP (button)) { @@ -605,7 +619,7 @@ mswindows_handle_toolbar_wm_command (struct frame* f, HWND ctrl, WORD id) Lisp_Object button, data, fn, arg, frame; button = Fgethash (make_int (id), - FRAME_MSWINDOWS_TOOLBAR_HASHTABLE (f), Qnil); + FRAME_MSWINDOWS_TOOLBAR_HASH_TABLE (f), Qnil); if (NILP (button)) return Qnil; @@ -635,5 +649,6 @@ console_type_create_toolbar_mswindows (void) CONSOLE_HAS_METHOD (mswindows, initialize_frame_toolbars); CONSOLE_HAS_METHOD (mswindows, free_frame_toolbars); CONSOLE_HAS_METHOD (mswindows, redraw_exposed_toolbars); + CONSOLE_HAS_METHOD (mswindows, redraw_frame_toolbars); }