/[emacs]/emacs/src/xmenu.c
ViewVC logotype

Diff of /emacs/src/xmenu.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.230.4.1 by miles, Fri Apr 4 06:21:09 2003 UTC revision 1.230.4.2 by miles, Tue Oct 14 23:22:51 2003 UTC
# Line 1  Line 1 
1  /* X Communication module for terminals which understand the X protocol.  /* X Communication module for terminals which understand the X protocol.
2     Copyright (C) 1986, 88, 93, 94, 96, 99, 2000, 2001     Copyright (C) 1986, 88, 93, 94, 96, 99, 2000, 2001, 2003
3     Free Software Foundation, Inc.     Free Software Foundation, Inc.
4    
5  This file is part of GNU Emacs.  This file is part of GNU Emacs.
# Line 68  Boston, MA 02111-1307, USA.  */ Line 68  Boston, MA 02111-1307, USA.  */
68  #include "dispextern.h"  #include "dispextern.h"
69    
70  #ifdef HAVE_X_WINDOWS  #ifdef HAVE_X_WINDOWS
71    /*  Defining HAVE_MULTILINGUAL_MENU would mean that the toolkit menu
72        code accepts the Emacs internal encoding.  */
73  #undef HAVE_MULTILINGUAL_MENU  #undef HAVE_MULTILINGUAL_MENU
74  #ifdef USE_X_TOOLKIT  #ifdef USE_X_TOOLKIT
75  #include "widget.h"  #include "widget.h"
# Line 127  extern void set_frame_menubar (); Line 129  extern void set_frame_menubar ();
129  static Lisp_Object xdialog_show ();  static Lisp_Object xdialog_show ();
130  #endif  #endif
131    
132    /* This is how to deal with multibyte text if HAVE_MULTILINGUAL_MENU
133       isn't defined.  The use of HAVE_MULTILINGUAL_MENU could probably be
134       confined to an extended version of this with sections of code below
135       using it unconditionally.  */
136    #ifdef USE_GTK
137    /* gtk just uses utf-8.  */
138    # define ENCODE_MENU_STRING(str) ENCODE_UTF_8 (str)
139    #else
140    /* I'm not convinced ENCODE_SYSTEM is defined correctly, or maybe
141       something else should be used here.  Except under MS-Windows it
142       just converts to unibyte, but encoding with `locale-coding-system'
143       seems better -- X may actually display the result correctly, and
144       it's not necessarily equivalent to the unibyte text.  -- fx  */
145    # define ENCODE_MENU_STRING(str) ENCODE_SYSTEM (str)
146    #endif
147    
148  static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object,  static void push_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
149                                  Lisp_Object, Lisp_Object, Lisp_Object,                                  Lisp_Object, Lisp_Object, Lisp_Object,
150                                  Lisp_Object, Lisp_Object));                                  Lisp_Object, Lisp_Object));
# Line 136  static Lisp_Object xmenu_show P_ ((struc Line 154  static Lisp_Object xmenu_show P_ ((struc
154  static void keymap_panes P_ ((Lisp_Object *, int, int));  static void keymap_panes P_ ((Lisp_Object *, int, int));
155  static void single_keymap_panes P_ ((Lisp_Object, Lisp_Object, Lisp_Object,  static void single_keymap_panes P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
156                                       int, int));                                       int, int));
 static void single_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object *,  
                                   int, int, int *));  
157  static void list_of_panes P_ ((Lisp_Object));  static void list_of_panes P_ ((Lisp_Object));
158  static void list_of_items P_ ((Lisp_Object));  static void list_of_items P_ ((Lisp_Object));
159    
# Line 410  keymap_panes (keymaps, nmaps, notreal) Line 426  keymap_panes (keymaps, nmaps, notreal)
426    finish_menu_items ();    finish_menu_items ();
427  }  }
428    
429    /* Args passed between single_keymap_panes and single_menu_item.  */
430    struct skp
431      {
432         Lisp_Object pending_maps;
433         int maxdepth, notreal;
434         int notbuttons;
435      };
436    
437    static void single_menu_item P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
438                                      void *));
439    
440  /* This is a recursive subroutine of keymap_panes.  /* This is a recursive subroutine of keymap_panes.
441     It handles one keymap, KEYMAP.     It handles one keymap, KEYMAP.
442     The other arguments are passed along     The other arguments are passed along
# Line 427  single_keymap_panes (keymap, pane_name, Line 454  single_keymap_panes (keymap, pane_name,
454       int notreal;       int notreal;
455       int maxdepth;       int maxdepth;
456  {  {
457    Lisp_Object pending_maps = Qnil;    struct skp skp;
458    Lisp_Object tail, item;    struct gcpro gcpro1;
459    struct gcpro gcpro1, gcpro2;  
460    int notbuttons = 0;    skp.pending_maps = Qnil;
461      skp.maxdepth = maxdepth;
462      skp.notreal = notreal;
463      skp.notbuttons = 0;
464    
465    if (maxdepth <= 0)    if (maxdepth <= 0)
466      return;      return;
# Line 442  single_keymap_panes (keymap, pane_name, Line 472  single_keymap_panes (keymap, pane_name,
472       add a prefix when (if) we see the first button.  After that, notbuttons       add a prefix when (if) we see the first button.  After that, notbuttons
473       is set to 0, to mark that we have seen a button and all non button       is set to 0, to mark that we have seen a button and all non button
474       items need a prefix.  */       items need a prefix.  */
475    notbuttons = menu_items_used;    skp.notbuttons = menu_items_used;
476  #endif  #endif
477    
478    for (tail = keymap; CONSP (tail); tail = XCDR (tail))    GCPRO1 (skp.pending_maps);
479      {    map_keymap (keymap, single_menu_item, Qnil, &skp, 1);
480        GCPRO2 (keymap, pending_maps);    UNGCPRO;
       /* Look at each key binding, and if it is a menu item add it  
          to this menu.  */  
       item = XCAR (tail);  
       if (CONSP (item))  
         single_menu_item (XCAR (item), XCDR (item),  
                           &pending_maps, notreal, maxdepth, &notbuttons);  
       else if (VECTORP (item))  
         {  
           /* Loop over the char values represented in the vector.  */  
           int len = XVECTOR (item)->size;  
           int c;  
           for (c = 0; c < len; c++)  
             {  
               Lisp_Object character;  
               XSETFASTINT (character, c);  
               single_menu_item (character, XVECTOR (item)->contents[c],  
                                 &pending_maps, notreal, maxdepth, &notbuttons);  
             }  
         }  
       UNGCPRO;  
     }  
481    
482    /* Process now any submenus which want to be panes at this level.  */    /* Process now any submenus which want to be panes at this level.  */
483    while (!NILP (pending_maps))    while (CONSP (skp.pending_maps))
484      {      {
485        Lisp_Object elt, eltcdr, string;        Lisp_Object elt, eltcdr, string;
486        elt = Fcar (pending_maps);        elt = XCAR (skp.pending_maps);
487        eltcdr = XCDR (elt);        eltcdr = XCDR (elt);
488        string = XCAR (eltcdr);        string = XCAR (eltcdr);
489        /* We no longer discard the @ from the beginning of the string here.        /* We no longer discard the @ from the beginning of the string here.
490           Instead, we do this in xmenu_show.  */           Instead, we do this in xmenu_show.  */
491        single_keymap_panes (Fcar (elt), string,        single_keymap_panes (Fcar (elt), string,
492                             XCDR (eltcdr), notreal, maxdepth - 1);                             XCDR (eltcdr), notreal, maxdepth - 1);
493        pending_maps = Fcdr (pending_maps);        skp.pending_maps = XCDR (skp.pending_maps);
494      }      }
495  }  }
496    
497  /* This is a subroutine of single_keymap_panes that handles one  /* This is a subroutine of single_keymap_panes that handles one
498     keymap entry.     keymap entry.
499     KEY is a key in a keymap and ITEM is its binding.     KEY is a key in a keymap and ITEM is its binding.
500     PENDING_MAPS_PTR points to a list of keymaps waiting to be made into     SKP->PENDING_MAPS_PTR is a list of keymaps waiting to be made into
501     separate panes.     separate panes.
502     If NOTREAL is nonzero, only check for equivalent key bindings, don't     If SKP->NOTREAL is nonzero, only check for equivalent key bindings, don't
503     evaluate expressions in menu items and don't make any menu.     evaluate expressions in menu items and don't make any menu.
504     If we encounter submenus deeper than MAXDEPTH levels, ignore them.     If we encounter submenus deeper than SKP->MAXDEPTH levels, ignore them.
505     NOTBUTTONS_PTR is only used when simulating toggle boxes and radio     SKP->NOTBUTTONS is only used when simulating toggle boxes and radio
506     buttons.  It points to variable notbuttons in single_keymap_panes,     buttons.  It keeps track of if we have seen a button in this menu or
507     which keeps track of if we have seen a button in this menu or not.  */     not.  */
508    
509  static void  static void
510  single_menu_item (key, item, pending_maps_ptr, notreal, maxdepth,  single_menu_item (key, item, dummy, skp_v)
511                    notbuttons_ptr)       Lisp_Object key, item, dummy;
512       Lisp_Object key, item;       void *skp_v;
      Lisp_Object *pending_maps_ptr;  
      int maxdepth, notreal;  
      int *notbuttons_ptr;  
513  {  {
514    Lisp_Object map, item_string, enabled;    Lisp_Object map, item_string, enabled;
515    struct gcpro gcpro1, gcpro2;    struct gcpro gcpro1, gcpro2;
516    int res;    int res;
517      struct skp *skp = skp_v;
518    
519    /* Parse the menu item and leave the result in item_properties.  */    /* Parse the menu item and leave the result in item_properties.  */
520    GCPRO2 (key, item);    GCPRO2 (key, item);
521    res = parse_menu_item (item, notreal, 0);    res = parse_menu_item (item, skp->notreal, 0);
522    UNGCPRO;    UNGCPRO;
523    if (!res)    if (!res)
524      return;                     /* Not a menu item.  */      return;                     /* Not a menu item.  */
525    
526    map = XVECTOR (item_properties)->contents[ITEM_PROPERTY_MAP];    map = XVECTOR (item_properties)->contents[ITEM_PROPERTY_MAP];
527      
528    if (notreal)    if (skp->notreal)
529      {      {
530        /* We don't want to make a menu, just traverse the keymaps to        /* We don't want to make a menu, just traverse the keymaps to
531           precompute equivalent key bindings.  */           precompute equivalent key bindings.  */
532        if (!NILP (map))        if (!NILP (map))
533          single_keymap_panes (map, Qnil, key, 1, maxdepth - 1);          single_keymap_panes (map, Qnil, key, 1, skp->maxdepth - 1);
534        return;        return;
535      }      }
536    
# Line 534  single_menu_item (key, item, pending_map Line 541  single_menu_item (key, item, pending_map
541      {      {
542        if (!NILP (enabled))        if (!NILP (enabled))
543          /* An enabled separate pane. Remember this to handle it later.  */          /* An enabled separate pane. Remember this to handle it later.  */
544          *pending_maps_ptr = Fcons (Fcons (map, Fcons (item_string, key)),          skp->pending_maps = Fcons (Fcons (map, Fcons (item_string, key)),
545                                     *pending_maps_ptr);                                     skp->pending_maps);
546        return;        return;
547      }      }
548    
# Line 550  single_menu_item (key, item, pending_map Line 557  single_menu_item (key, item, pending_map
557          Lisp_Object selected          Lisp_Object selected
558            = XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED];            = XVECTOR (item_properties)->contents[ITEM_PROPERTY_SELECTED];
559    
560          if (*notbuttons_ptr)          if (skp->notbuttons)
561            /* The first button. Line up previous items in this menu.  */            /* The first button. Line up previous items in this menu.  */
562            {            {
563              int index = *notbuttons_ptr; /* Index for first item this menu.  */              int index = skp->notbuttons; /* Index for first item this menu.  */
564              int submenu = 0;              int submenu = 0;
565              Lisp_Object tem;              Lisp_Object tem;
566              while (index < menu_items_used)              while (index < menu_items_used)
# Line 583  single_menu_item (key, item, pending_map Line 590  single_menu_item (key, item, pending_map
590                      index += MENU_ITEMS_ITEM_LENGTH;                      index += MENU_ITEMS_ITEM_LENGTH;
591                    }                    }
592                }                }
593              *notbuttons_ptr = 0;              skp->notbuttons = 0;
594            }            }
595    
596          /* Calculate prefix, if any, for this item.  */          /* Calculate prefix, if any, for this item.  */
# Line 593  single_menu_item (key, item, pending_map Line 600  single_menu_item (key, item, pending_map
600            prefix = build_string (NILP (selected) ? "( ) " : "(*) ");            prefix = build_string (NILP (selected) ? "( ) " : "(*) ");
601        }        }
602      /* Not a button. If we have earlier buttons, then we need a prefix.  */      /* Not a button. If we have earlier buttons, then we need a prefix.  */
603      else if (!*notbuttons_ptr && SREF (item_string, 0) != '\0'      else if (!skp->notbuttons && SREF (item_string, 0) != '\0'
604               && SREF (item_string, 0) != '-')               && SREF (item_string, 0) != '-')
605        prefix = build_string ("    ");        prefix = build_string ("    ");
606    
# Line 620  single_menu_item (key, item, pending_map Line 627  single_menu_item (key, item, pending_map
627    if (! (NILP (map) || NILP (enabled)))    if (! (NILP (map) || NILP (enabled)))
628      {      {
629        push_submenu_start ();        push_submenu_start ();
630        single_keymap_panes (map, Qnil, key, 0, maxdepth - 1);        single_keymap_panes (map, Qnil, key, 0, skp->maxdepth - 1);
631        push_submenu_end ();        push_submenu_end ();
632      }      }
633  #endif  #endif
# Line 644  list_of_panes (menu) Line 651  list_of_panes (menu)
651        elt = Fcar (tail);        elt = Fcar (tail);
652        pane_name = Fcar (elt);        pane_name = Fcar (elt);
653        CHECK_STRING (pane_name);        CHECK_STRING (pane_name);
654        push_menu_pane (pane_name, Qnil);        push_menu_pane (ENCODE_MENU_STRING (pane_name), Qnil);
655        pane_data = Fcdr (elt);        pane_data = Fcdr (elt);
656        CHECK_CONS (pane_data);        CHECK_CONS (pane_data);
657        list_of_items (pane_data);        list_of_items (pane_data);
# Line 665  list_of_items (pane) Line 672  list_of_items (pane)
672      {      {
673        item = Fcar (tail);        item = Fcar (tail);
674        if (STRINGP (item))        if (STRINGP (item))
675          push_menu_item (item, Qnil, Qnil, Qt, Qnil, Qnil, Qnil, Qnil);          push_menu_item (ENCODE_MENU_STRING (item), Qnil, Qnil, Qt,
676                            Qnil, Qnil, Qnil, Qnil);
677        else if (NILP (item))        else if (NILP (item))
678          push_left_right_boundary ();          push_left_right_boundary ();
679        else        else
# Line 673  list_of_items (pane) Line 681  list_of_items (pane)
681            CHECK_CONS (item);            CHECK_CONS (item);
682            item1 = Fcar (item);            item1 = Fcar (item);
683            CHECK_STRING (item1);            CHECK_STRING (item1);
684            push_menu_item (item1, Qt, Fcdr (item), Qt, Qnil, Qnil, Qnil, Qnil);            push_menu_item (ENCODE_MENU_STRING (item1), Qt, Fcdr (item),
685                              Qt, Qnil, Qnil, Qnil, Qnil);
686          }          }
687      }      }
688  }  }
# Line 720  mouse_position_for_popup(f, x, y) Line 729  mouse_position_for_popup(f, x, y)
729    
730    /* xmenu_show expects window coordinates, not root window    /* xmenu_show expects window coordinates, not root window
731       coordinates.  Translate.  */       coordinates.  Translate.  */
732    *x -= f->output_data.x->left_pos    *x -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
733      + FRAME_OUTER_TO_INNER_DIFF_X (f);    *y -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
   *y -= f->output_data.x->top_pos  
     + FRAME_OUTER_TO_INNER_DIFF_Y (f);  
734  }  }
735    
736  #endif /* HAVE_X_WINDOWS */  #endif /* HAVE_X_WINDOWS */
# Line 872  cached information about equivalent key Line 879  cached information about equivalent key
879            CHECK_LIVE_WINDOW (window);            CHECK_LIVE_WINDOW (window);
880            f = XFRAME (WINDOW_FRAME (XWINDOW (window)));            f = XFRAME (WINDOW_FRAME (XWINDOW (window)));
881    
882            xpos = (FONT_WIDTH (FRAME_FONT (f))            xpos = WINDOW_LEFT_EDGE_X (XWINDOW (window));
883                    * XFASTINT (XWINDOW (window)->left));            ypos = WINDOW_TOP_EDGE_Y (XWINDOW (window));
           ypos = (FRAME_LINE_HEIGHT (f)  
                   * XFASTINT (XWINDOW (window)->top));  
884          }          }
885        else        else
886          /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME,          /* ??? Not really clean; should be CHECK_WINDOW_OR_FRAME,
# Line 1414  find_and_call_menu_selection (f, menu_ba Line 1419  find_and_call_menu_selection (f, menu_ba
1419                int j;                int j;
1420                struct input_event buf;                struct input_event buf;
1421                Lisp_Object frame;                Lisp_Object frame;
1422                  EVENT_INIT (buf);
1423    
1424                XSETFRAME (frame, f);                XSETFRAME (frame, f);
1425                buf.kind = MENU_BAR_EVENT;                buf.kind = MENU_BAR_EVENT;
# Line 1712  digest_single_submenu (start, end, top_l Line 1718  digest_single_submenu (start, end, top_l
1718  #ifndef HAVE_MULTILINGUAL_MENU  #ifndef HAVE_MULTILINGUAL_MENU
1719            if (STRING_MULTIBYTE (item_name))            if (STRING_MULTIBYTE (item_name))
1720              {              {
1721                item_name = ENCODE_SYSTEM (item_name);                item_name = ENCODE_MENU_STRING (item_name);
1722                AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;                AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;
1723              }              }
1724    
1725            if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))            if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))
1726              {              {
1727                descrip = ENCODE_SYSTEM (descrip);                descrip = ENCODE_MENU_STRING (descrip);
1728                AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;                AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;
1729              }              }
1730  #endif /* not HAVE_MULTILINGUAL_MENU */  #endif /* not HAVE_MULTILINGUAL_MENU */
# Line 1790  update_frame_menubar (f) Line 1796  update_frame_menubar (f)
1796    BLOCK_INPUT;    BLOCK_INPUT;
1797    /* Save the size of the frame because the pane widget doesn't accept    /* Save the size of the frame because the pane widget doesn't accept
1798       to resize itself. So force it.  */       to resize itself. So force it.  */
1799    columns = f->width;    columns = FRAME_COLS (f);
1800    rows = f->height;    rows = FRAME_LINES (f);
1801    
1802    /* Do the voodoo which means "I'm changing lots of things, don't try    /* Do the voodoo which means "I'm changing lots of things, don't try
1803       to refigure sizes until I'm done."  */       to refigure sizes until I'm done."  */
# Line 2325  create_and_show_popup_menu (f, first_wv, Line 2331  create_and_show_popup_menu (f, first_wv,
2331        pos_func = menu_position_func;        pos_func = menu_position_func;
2332    
2333        /* Adjust coordinates to be root-window-relative.  */        /* Adjust coordinates to be root-window-relative.  */
2334        x += f->output_data.x->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);        x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
2335        y += f->output_data.x->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);        y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
2336    
2337        popup_x_y.x = x;        popup_x_y.x = x;
2338        popup_x_y.y = y;        popup_x_y.y = y;
# Line 2392  create_and_show_popup_menu (f, first_wv, Line 2398  create_and_show_popup_menu (f, first_wv,
2398    XButtonPressedEvent dummy;    XButtonPressedEvent dummy;
2399    LWLIB_ID menu_id;    LWLIB_ID menu_id;
2400    Widget menu;    Widget menu;
   Window child;  
2401    
2402    menu_id = widget_id_tick++;    menu_id = widget_id_tick++;
2403    menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv,    menu = lw_create_widget ("popup", first_wv->name, menu_id, first_wv,
# Line 2413  create_and_show_popup_menu (f, first_wv, Line 2418  create_and_show_popup_menu (f, first_wv,
2418    dummy.y = y;    dummy.y = y;
2419    
2420    /* Adjust coordinates to be root-window-relative.  */    /* Adjust coordinates to be root-window-relative.  */
2421    x += f->output_data.x->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);    x += f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
2422    y += f->output_data.x->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);    y += f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
2423    
2424    dummy.x_root = x;    dummy.x_root = x;
2425    dummy.y_root = y;    dummy.y_root = y;
# Line 2576  xmenu_show (f, x, y, for_click, keymaps, Line 2581  xmenu_show (f, x, y, for_click, keymaps,
2581  #ifndef HAVE_MULTILINGUAL_MENU  #ifndef HAVE_MULTILINGUAL_MENU
2582            if (STRINGP (item_name) && STRING_MULTIBYTE (item_name))            if (STRINGP (item_name) && STRING_MULTIBYTE (item_name))
2583              {              {
2584                item_name = ENCODE_SYSTEM (item_name);                item_name = ENCODE_MENU_STRING (item_name);
2585                AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;                AREF (menu_items, i + MENU_ITEMS_ITEM_NAME) = item_name;
2586              }              }
2587    
2588            if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))            if (STRINGP (descrip) && STRING_MULTIBYTE (descrip))
2589              {              {
2590                descrip = ENCODE_SYSTEM (descrip);                descrip = ENCODE_MENU_STRING (descrip);
2591                AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;                AREF (menu_items, i + MENU_ITEMS_ITEM_EQUIV_KEY) = descrip;
2592              }              }
2593  #endif /* not HAVE_MULTILINGUAL_MENU */  #endif /* not HAVE_MULTILINGUAL_MENU */
# Line 2642  xmenu_show (f, x, y, for_click, keymaps, Line 2647  xmenu_show (f, x, y, for_click, keymaps,
2647    
2648  #ifndef HAVE_MULTILINGUAL_MENU  #ifndef HAVE_MULTILINGUAL_MENU
2649        if (STRING_MULTIBYTE (title))        if (STRING_MULTIBYTE (title))
2650          title = ENCODE_SYSTEM (title);          title = ENCODE_MENU_STRING (title);
2651  #endif  #endif
2652    
2653        wv_title->name = (char *) SDATA (title);        wv_title->name = (char *) SDATA (title);
# Line 3131  xmenu_show (f, x, y, for_click, keymaps, Line 3136  xmenu_show (f, x, y, for_click, keymaps,
3136  #endif /* HAVE_X_WINDOWS */  #endif /* HAVE_X_WINDOWS */
3137    
3138    /* Adjust coordinates to be root-window-relative.  */    /* Adjust coordinates to be root-window-relative.  */
3139    x += f->output_data.x->left_pos;    x += f->left_pos;
3140    y += f->output_data.x->top_pos;    y += f->top_pos;
3141    
3142    /* Create all the necessary panes and their items.  */    /* Create all the necessary panes and their items.  */
3143    i = 0;    i = 0;
# Line 3371  The enable predicate for a menu command Line 3376  The enable predicate for a menu command
3376    defsubr (&Sx_popup_dialog);    defsubr (&Sx_popup_dialog);
3377  #endif  #endif
3378  }  }
3379    
3380    /* arch-tag: 92ea573c-398e-496e-ac73-2436f7d63242
3381       (do not change this comment) */

Legend:
Removed from v.1.230.4.1  
changed lines
  Added in v.1.230.4.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26