XEmacs 21.2.28 "Hermes".
[chise/xemacs-chise.git.1] / src / toolbar-msw.c
index b9fa959..a09610e 100644 (file)
@@ -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++;
     }
@@ -258,11 +262,11 @@ mswindows_output_toolbar (struct frame *f, enum toolbar_pos pos)
              
              if (IMAGE_INSTANCEP (instance))
                {
-                 struct Lisp_Image_Instance* p = XIMAGE_INSTANCE (instance);
+                 Lisp_Image_Instance* p = XIMAGE_INSTANCE (instance);
                  
                  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)
 {
 
@@ -572,7 +586,7 @@ mswindows_free_frame_toolbars (struct frame *f)
 }
 
 /* map toolbar hwnd to pos*/
-int mswindows_find_toolbar_pos(struct frame* f, HWND ctrl)
+static int mswindows_find_toolbar_pos(struct frame* f, HWND ctrl)
 {
   int id = GetDlgCtrlID(ctrl);
   return id ? id - TOOLBAR_ID_BIAS : -1;
@@ -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);
 }