guile-elisp bootstrap (lisp)
[bpt/emacs.git] / src / gtkutil.h
dissimilarity index 69%
index 57099f6..a69932c 100644 (file)
-/* Definitions and headers for GTK widgets.
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
-     Free Software Foundation, Inc.
-
-This file is part of GNU Emacs.
-
-GNU Emacs is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-GNU Emacs is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef GTKUTIL_H
-#define GTKUTIL_H
-
-
-#ifdef USE_GTK
-
-#include <gtk/gtk.h>
-#include "frame.h"
-
-/* Minimum and maximum values used for GTK scroll bars  */
-
-#define XG_SB_MIN 1
-#define XG_SB_MAX 10000000
-#define XG_SB_RANGE (XG_SB_MAX-XG_SB_MIN)
-
-/* Key for data that is valid for menus and scroll bars in a frame  */
-#define XG_FRAME_DATA "emacs_frame"
-
-/* Key for data that menu items hold.  */
-#define XG_ITEM_DATA "emacs_menuitem"
-
-
-/* Button types in menus.  */
-enum button_type
-{
-  BUTTON_TYPE_NONE,
-  BUTTON_TYPE_TOGGLE,
-  BUTTON_TYPE_RADIO
-};
-
-/* This is a list node in a generic list implementation.  */
-typedef struct xg_list_node_
-{
-  struct xg_list_node_ *prev;
-  struct xg_list_node_ *next;
-} xg_list_node;
-
-/* This structure is the callback data that is shared for menu items.
-   We need to keep it separate from the frame structure due to
-   detachable menus.  The data in the frame structure is only valid while
-   the menu is popped up.  This structure is kept around as long as
-   the menu is.  */
-typedef struct xg_menu_cb_data_
-{
-  xg_list_node  ptrs;
-
-  FRAME_PTR     f;
-  Lisp_Object   menu_bar_vector;
-  int           menu_bar_items_used;
-  GCallback     highlight_cb;
-  int           ref_count;
-} xg_menu_cb_data;
-
-/* This structure holds callback information for each individual menu item.  */
-typedef struct xg_menu_item_cb_data_
-{
-  xg_list_node  ptrs;
-
-  gulong        select_id;
-  Lisp_Object   help;
-  gpointer     call_data;
-  xg_menu_cb_data *cl_data;
-
-} xg_menu_item_cb_data;
-
-
-/* Used to specify menus and dialogs.
-   This is an adaption from lwlib for Gtk so we can use more of the same
-   code as lwlib in xmenu.c.  */
-typedef struct _widget_value
-{
-  /* name of widget */
-  Lisp_Object   lname;
-  char         *name;
-  /* value (meaning depend on widget type) */
-  char         *value;
-  /* keyboard equivalent. no implications for XtTranslations */
-  Lisp_Object   lkey;
-  char         *key;
-  /* Help string or nil if none.
-     GC finds this string through the frame's menu_bar_vector
-     or through menu_items.  */
-  Lisp_Object  help;
-  /* true if enabled */
-  gint         enabled;
-  /* true if selected */
-  gint selected;
-  /* The type of a button.  */
-  enum button_type button_type;
-  /* Contents of the sub-widgets, also selected slot for checkbox */
-  struct _widget_value *contents;
-  /* data passed to callback */
-  gpointer     call_data;
-  /* next one in the list */
-  struct _widget_value *next;
-
-  /* we resource the widget_value structures; this points to the next
-     one on the free list if this one has been deallocated.
-   */
-  struct _widget_value *free_list;
-} widget_value;
-
-#ifdef HAVE_GTK_FILE_BOTH
-extern int use_old_gtk_file_dialog;
-#endif
-
-extern widget_value *malloc_widget_value P_ ((void));
-extern void free_widget_value P_ ((widget_value *));
-
-extern int xg_uses_old_file_dialog P_ ((void));
-
-extern char *xg_get_file_name P_ ((FRAME_PTR f,
-                                   char *prompt,
-                                   char *default_filename,
-                                   int mustmatch_p,
-                                   int only_dir_p));
-
-extern char *xg_get_font_name P_ ((FRAME_PTR f, char *));
-
-extern GtkWidget *xg_create_widget P_ ((char *type,
-                                        char *name,
-                                        FRAME_PTR f,
-                                        widget_value *val,
-                                        GCallback select_cb,
-                                        GCallback deactivate_cb,
-                                        GCallback hightlight_cb));
-
-extern void xg_modify_menubar_widgets P_ ((GtkWidget *menubar,
-                                           FRAME_PTR f,
-                                           widget_value *val,
-                                           int deep_p,
-                                           GCallback select_cb,
-                                           GCallback deactivate_cb,
-                                           GCallback hightlight_cb));
-
-extern int xg_update_frame_menubar P_ ((FRAME_PTR f));
-
-extern int xg_event_is_for_menubar P_ ((FRAME_PTR f, XEvent *event));
-
-extern int xg_have_tear_offs P_ ((void));
-
-extern int xg_get_scroll_id_for_window P_ ((Display *dpy, Window wid));
-
-extern void xg_create_scroll_bar P_ ((FRAME_PTR f,
-                                      struct scroll_bar *bar,
-                                      GCallback scroll_callback,
-                                      GCallback end_callback,
-                                      char *scroll_bar_name));
-extern void xg_show_scroll_bar P_ ((int scrollbar_id));
-extern void xg_remove_scroll_bar P_ ((FRAME_PTR f, int scrollbar_id));
-
-extern void xg_update_scrollbar_pos P_ ((FRAME_PTR f,
-                                         int scrollbar_id,
-                                         int top,
-                                         int left,
-                                         int width,
-                                         int height));
-
-extern void xg_set_toolkit_scroll_bar_thumb P_ ((struct scroll_bar *bar,
-                                                 int portion,
-                                                 int position,
-                                                 int whole));
-extern int xg_event_is_for_scrollbar P_ ((FRAME_PTR f, XEvent *event));
-
-extern void update_frame_tool_bar P_ ((FRAME_PTR f));
-extern void free_frame_tool_bar P_ ((FRAME_PTR f));
-
-extern void xg_frame_resized P_ ((FRAME_PTR f,
-                                  int pixelwidth,
-                                  int pixelheight));
-extern void xg_frame_set_char_size P_ ((FRAME_PTR f, int cols, int rows));
-extern GtkWidget * xg_win_to_widget P_ ((Display *dpy, Window wdesc));
-
-extern int xg_display_open P_ ((char *display_name, Display **dpy));
-extern void xg_display_close P_ ((Display *dpy));
-extern GdkCursor * xg_create_default_cursor P_ ((Display *dpy));
-
-extern int xg_create_frame_widgets P_ ((FRAME_PTR f));
-extern void x_wm_set_size_hint P_ ((FRAME_PTR f,
-                                    long flags,
-                                    int user_position));
-extern void xg_set_background_color P_ ((FRAME_PTR f, unsigned long bg));
-
-extern void xg_set_frame_icon P_ ((FRAME_PTR f,
-                                   Pixmap icon_pixmap,
-                                   Pixmap icon_mask));
-
-/* Mark all callback data that are Lisp_object:s during GC.  */
-extern void xg_mark_data P_ ((void));
-
-/* Initialize GTK specific parts.  */
-extern void xg_initialize P_ ((void));
-
-/* Setting scrollbar values invokes the callback.  Use this variable
-   to indicate that the callback should do nothing.  */
-extern int xg_ignore_gtk_scrollbar;
-
-#endif /* USE_GTK */
-#endif /* GTKUTIL_H */
-
-/* arch-tag: 0757f3dc-00c7-4cee-9e4c-282cf1d34c72
-   (do not change this comment) */
+/* Definitions and headers for GTK widgets.
+
+Copyright (C) 2003-2014 Free Software Foundation, Inc.
+
+This file is part of GNU Emacs.
+
+GNU Emacs is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GNU Emacs is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef GTKUTIL_H
+#define GTKUTIL_H
+
+
+#ifdef USE_GTK
+
+#include <gtk/gtk.h>
+#include "../lwlib/lwlib-widget.h"
+#include "frame.h"
+#include "xterm.h"
+
+/* Minimum and maximum values used for GTK scroll bars  */
+
+#define XG_SB_MIN 1
+#define XG_SB_MAX 10000000
+#define XG_SB_RANGE (XG_SB_MAX-XG_SB_MIN)
+
+/* Key for data that is valid for menus and scroll bars in a frame  */
+#define XG_FRAME_DATA "emacs_frame"
+
+/* Key for data that menu items hold.  */
+#define XG_ITEM_DATA "emacs_menuitem"
+
+/* This is a list node in a generic list implementation.  */
+typedef struct xg_list_node_
+{
+  struct xg_list_node_ *prev;
+  struct xg_list_node_ *next;
+} xg_list_node;
+
+/* This structure is the callback data that is shared for menu items.
+   We need to keep it separate from the frame structure due to
+   detachable menus.  The data in the frame structure is only valid while
+   the menu is popped up.  This structure is kept around as long as
+   the menu is.  */
+typedef struct xg_menu_cb_data_
+{
+  xg_list_node  ptrs;
+
+  struct frame  *f;
+  Lisp_Object   menu_bar_vector;
+  int           menu_bar_items_used;
+  GCallback     highlight_cb;
+  int           ref_count;
+} xg_menu_cb_data;
+
+/* This structure holds callback information for each individual menu item.  */
+typedef struct xg_menu_item_cb_data_
+{
+  xg_list_node  ptrs;
+
+  gulong        select_id;
+  Lisp_Object   help;
+  gpointer     call_data;
+  xg_menu_cb_data *cl_data;
+
+} xg_menu_item_cb_data;
+
+extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST;
+
+extern char *xg_get_file_name (struct frame *f,
+                               char *prompt,
+                               char *default_filename,
+                               bool mustmatch_p,
+                               bool only_dir_p);
+
+extern Lisp_Object xg_get_font (struct frame *f, const char *);
+
+extern GtkWidget *xg_create_widget (const char *type,
+                                    const char *name,
+                                    struct frame *f,
+                                    struct _widget_value *val,
+                                    GCallback select_cb,
+                                    GCallback deactivate_cb,
+                                    GCallback highlight_cb);
+
+extern void xg_modify_menubar_widgets (GtkWidget *menubar,
+                                       struct frame *f,
+                                       struct _widget_value *val,
+                                       bool deep_p,
+                                       GCallback select_cb,
+                                       GCallback deactivate_cb,
+                                       GCallback highlight_cb);
+
+extern void xg_update_frame_menubar (struct frame *f);
+
+extern bool xg_event_is_for_menubar (struct frame *, const XEvent *);
+
+extern bool xg_have_tear_offs (struct frame *f);
+
+extern ptrdiff_t xg_get_scroll_id_for_window (Display *dpy, Window wid);
+
+extern void xg_create_scroll_bar (struct frame *f,
+                                  struct scroll_bar *bar,
+                                  GCallback scroll_callback,
+                                  GCallback end_callback,
+                                  const char *scroll_bar_name);
+extern void xg_remove_scroll_bar (struct frame *f, ptrdiff_t scrollbar_id);
+
+extern void xg_update_scrollbar_pos (struct frame *f,
+                                     ptrdiff_t scrollbar_id,
+                                     int top,
+                                     int left,
+                                     int width,
+                                     int height);
+
+extern void xg_set_toolkit_scroll_bar_thumb (struct scroll_bar *bar,
+                                             int portion,
+                                             int position,
+                                             int whole);
+extern bool xg_event_is_for_scrollbar (struct frame *, const XEvent *);
+extern int xg_get_default_scrollbar_width (void);
+
+extern void update_frame_tool_bar (struct frame *f);
+extern void free_frame_tool_bar (struct frame *f);
+extern void xg_change_toolbar_position (struct frame *f, Lisp_Object pos);
+
+extern void xg_frame_resized (struct frame *f,
+                              int pixelwidth,
+                              int pixelheight);
+extern void xg_frame_set_char_size (struct frame *f, int width, int height);
+extern GtkWidget * xg_win_to_widget (Display *dpy, Window wdesc);
+
+extern void xg_display_open (char *display_name, Display **dpy);
+extern void xg_display_close (Display *dpy);
+extern GdkCursor * xg_create_default_cursor (Display *dpy);
+
+extern bool xg_create_frame_widgets (struct frame *f);
+extern void xg_free_frame_widgets (struct frame *f);
+extern void xg_set_background_color (struct frame *f, unsigned long bg);
+extern bool xg_check_special_colors (struct frame *f,
+                                    const char *color_name,
+                                    XColor *color);
+
+extern void xg_set_frame_icon (struct frame *f,
+                               Pixmap icon_pixmap,
+                               Pixmap icon_mask);
+
+extern bool xg_prepare_tooltip (struct frame *f,
+                               Lisp_Object string,
+                               int *width,
+                               int *height);
+extern void xg_show_tooltip (struct frame *f, int root_x, int root_y);
+extern bool xg_hide_tooltip (struct frame *f);
+
+
+/* Mark all callback data that are Lisp_object:s during GC.  */
+extern void xg_mark_data (void);
+
+/* Initialize GTK specific parts.  */
+extern void xg_initialize (void);
+
+/* Setting scrollbar values invokes the callback.  Use this variable
+   to indicate that the callback should do nothing.  */
+extern bool xg_ignore_gtk_scrollbar;
+
+#endif /* USE_GTK */
+#endif /* GTKUTIL_H */