diff src/gtkutil.h @ 49323:078b78ea8e76

GTK files gtkutil.c and .h
author Jan Djärv <jan.h.d@swipnet.se>
date Sun, 19 Jan 2003 21:57:12 +0000
parents
children a4d0ee33dcce
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gtkutil.h	Sun Jan 19 21:57:12 2003 +0000
@@ -0,0 +1,210 @@
+/* Definitions and headers for GTK widgets.
+   Copyright (C) 2003
+   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 2, 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; see the file COPYING.  If not, write to
+the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#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 0
+#define XG_SB_MAX 10000000
+
+/* Key for data that is valid for menus in a frame  */
+#define XG_FRAME_DATA "emacs_frame"
+
+/* Key for data that is the last scrollbar value  */
+#define XG_LAST_SB_DATA "emacs_last_sb_value"
+
+/* 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        highlight_id;
+  gulong        unhighlight_id;
+  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 */
+  char		*name;
+  /* value (meaning depend on widget type) */
+  char		*value;
+  /* keyboard equivalent. no implications for XtTranslations */ 
+  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;
+
+extern widget_value *malloc_widget_value ();
+extern void free_widget_value P_ ((widget_value *));
+
+extern char *xg_get_file_name P_ ((FRAME_PTR f,
+                                   char *prompt,
+                                   char *default_filename,
+                                   int mustmatch_p));
+
+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 void xg_keep_popup P_ ((GtkWidget *menu, GtkWidget *submenu));
+
+extern void xg_create_scroll_bar P_ ((FRAME_PTR f,
+                                      struct scroll_bar *bar,
+                                      GCallback scroll_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 void update_frame_tool_bar P_ ((FRAME_PTR f));
+extern void free_frame_tool_bar P_ ((FRAME_PTR f));
+
+extern void xg_resize_widgets 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_ ((Window));
+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));
+
+/* Mark all callback data that are Lisp_object:s during GC.  */
+extern void xg_mark_data ();
+
+/* Initialize GTK specific parts.  */
+extern void xg_initialize ();
+
+/* Setting scrollbar values invokes the callback.  Use this variable
+   to indicate that the callback should do nothing.  */
+extern int xg_ignore_gtk_scrollbar;
+
+/* After we send a scroll bar event,  x_set_toolkit_scroll_bar_thumb will
+   be called.  For some reason that needs to be debugged, it gets called
+   with bad values.  Thus, we set this variable to ignore those calls.  */
+extern int xg_ignore_next_thumb;
+
+/* If a detach of a menu is done, this is the menu widget that got
+   detached.  Must be set to NULL before popping up popup menus.
+   Used with xg_keep_popup to delay deleting popup menus when they
+   have been detached.  */
+extern GtkWidget *xg_did_tearoff;
+
+#endif /* USE_GTK */
+#endif /* GTKUTIL_H */