annotate src/frame-gtk.c @ 2500:3d8143fc88e1

[xemacs-hg @ 2005-01-24 23:33:30 by ben] get working with VC7 config.inc.samp: Declare OPTIONAL_LIBRARY_DIR as root of library directories. Redo all graphics library defaults to mirror the versions and directories in the current binary aux distribution on xemacs web site. Enable TIFF and COMPFACE by default since you can now compile with them and binary libs are provided. xemacs.mak: Put our own directories first in case of conflict (e.g. config.h in compface). xemacs.mak: Use MSVCRT to avoid link problems. s/windowsnt.h: bytecode.c, print.c: Add casts to avoid warning. compiler.h: Add MSC_VERSION and include definitions of DOESNT_RETURN and friends here, like for GCC. Need different definitions for VC7 and VC6. s/windowsnt.h: Remove stuff moved to compiler.h. Disable warning 4646 ("function declared with __declspec(noreturn) has non-void return type") on VC7 since lots of Lisp primitives trigger this and there is no easy way to kludge around the warning. glyphs-eimage.c: Some really nasty hacks to allow TIFF and JPEG to both be compiled. #### The better solution is to move the TIFF and JPEG code to different files. glyphs-msw.c: Define __STDC__ to avoid problems with compface.h. intl-auto-encap-win32.c, intl-auto-encap-win32.h, intl-encap-win32.c, syswindows.h: Those wankers at Microsoft cannot leave well enough alone. Various functions change parameter types semi-randomly between VC6 and VC7, so we need to include our own versions that can handle both kinds with appropriate casting. EmacsFrame.c, EmacsShell-sub.c, EmacsShell.c, alloc.c, alloca.c, buffer.c, bytecode.c, charset.h, chartab.c, cm.c, console-stream.c, console.c, data.c, debug.h, device-msw.c, device-tty.c, device-x.c, doprnt.c, dumper.c, dynarr.c, elhash.c, emacs.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, fns.c, font-lock.c, frame-gtk.c, frame-x.c, frame.c, free-hook.c, gccache-gtk.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, glyphs.c, gtk-glue.c, gutter.c, input-method-xlib.c, insdel.c, intl-win32.c, keymap.c, lisp.h, lread.c, lstream.c, macros.c, malloc.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, mule-coding.c, native-gtk-toolbar.c, number.c, objects-msw.c, objects.c, print.c, process-nt.c, process-unix.c, process.c, ralloc.c, rangetab.c, redisplay-gtk.c, redisplay-msw.c, redisplay-output.c, redisplay-tty.c, redisplay-x.c, redisplay.c, regex.c, scrollbar-gtk.c, scrollbar-x.c, search.c, select-x.c, signal.c, specifier.c, specifier.h, strftime.c, sunplay.c, symbols.c, sysdep.c, sysproc.h, text.c, text.h, toolbar-common.c, toolbar-msw.c, toolbar.c, ui-gtk.c, unexnt.c, unicode.c, win32.c, window.c, xgccache.c, s/windowsnt.h: abort() -> ABORT(). Eliminate preprocessor games with abort() since it creates huge problems in VC7, solvable only by including massive amounts of files in every compile (and not worth it).
author ben
date Mon, 24 Jan 2005 23:34:34 +0000
parents 04bc9d2f42c7
children dbd2a866e38a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1 /* Functions for the GTK toolkit.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 Copyright (C) 1989, 1992-5, 1997 Free Software Foundation, Inc.
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
3 Copyright (C) 1995, 1996, 2002, 2003 Ben Wing.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 later version.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 for more details.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 /* Synched up with: Not synched with FSF. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24 /* Substantially rewritten for XEmacs. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 /* Revamped to use Gdk/Gtk by William Perry */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 #include "lisp.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
30 #include "buffer.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
31 #include "device-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
32 #include "events.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
33 #include "extents.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
34 #include "faces.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
35 #include "frame-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
36 #include "window.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
37
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
38 #ifdef HAVE_DRAGNDROP
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
39 #include "dragdrop.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
40 #endif
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
41
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
42 #include "elhash.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
43 #include "console-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 #include "glyphs-gtk.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
45 #include "objects-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 #include "scrollbar-gtk.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
47 #include "ui-gtk.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49 #include "gtk-xemacs.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 #include <libgnomeui/libgnomeui.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55 #define BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56 #define INTERNAL_BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58 #define TRANSIENT_DATA_IDENTIFIER "xemacs::transient_for"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 #define UNMAPPED_DATA_IDENTIFIER "xemacs::initially_unmapped"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
60
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 #define STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64 #include <gdk/gdkx.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67 /* Default properties to use when creating frames. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 Lisp_Object Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 Lisp_Object Qdetachable_menubar;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 Lisp_Object Qtext_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 Lisp_Object Qcontainer_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 Lisp_Object Qshell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76 EXFUN (Fgtk_window_id, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 enum {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 TARGET_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82 TARGET_TYPE_URI_LIST,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 static GtkTargetEntry dnd_target_table[] = {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 { "STRING", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 { "text/plain", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 { "text/uri-list", 0, TARGET_TYPE_URI_LIST },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 { "_NETSCAPE_URL", 0, TARGET_TYPE_STRING }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 static guint dnd_n_targets = sizeof(dnd_target_table) / sizeof(dnd_target_table[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
96 static const struct memory_description gtk_frame_data_description_1 [] = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
97 { XD_LISP_OBJECT, offsetof (struct gtk_frame, icon_pixmap) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
98 { XD_LISP_OBJECT, offsetof (struct gtk_frame, icon_pixmap_mask) },
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
99 { XD_LISP_OBJECT_ARRAY, offsetof (struct gtk_frame, lisp_visible_widgets),
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
100 3 },
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
101 { XD_LISP_OBJECT, offsetof (struct gtk_frame, menubar_data) },
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
102 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
103 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
104
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
105 extern const struct sized_memory_description gtk_frame_data_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
106
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
107 const struct sized_memory_description gtk_frame_data_description = {
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
108 sizeof (struct gtk_frame), gtk_frame_data_description_1
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
109 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
110
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 /* helper functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
116 /* Return the Emacs frame-object which contains the given widget. */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
117 struct frame *
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
118 gtk_widget_to_frame (GtkWidget *w)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
119 {
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
120 struct frame *f = NULL;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
121
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
122 for (; w; w = w->parent)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
123 {
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
124 if ((f = (struct frame *) gtk_object_get_data (GTK_OBJECT (w),
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
125 GTK_DATA_FRAME_IDENTIFIER)))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
126 return (f);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
127 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
128
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
129 return (selected_frame());
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
130 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
131
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
132
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 /* Return the Emacs frame-object corresponding to an X window */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 gtk_window_to_frame (struct device *d, GdkWindow *wdesc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 Lisp_Object tail, frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 struct frame *f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 /* This function was previously written to accept only a window argument
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 (and to loop over all devices looking for a matching window), but
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 that is incorrect because window ID's are not unique across displays. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 for (tail = DEVICE_FRAME_LIST (d); CONSP (tail); tail = XCDR (tail))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 frame = XCAR (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 if (!FRAMEP (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 f = XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 if (FRAME_GTK_P (f) && GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f)) == wdesc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 return f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 /* Like gtk_window_to_frame but also compares the window with the widget's
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 windows */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 gtk_any_window_to_frame (struct device *d, GdkWindow *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 do
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 DEVICE_FRAME_LOOP (frmcons, d)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167 struct frame *fr = XFRAME (XCAR (frmcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 if ((w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_CONTAINER_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_MENUBAR_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (fr))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 return (fr);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 w = gdk_window_get_parent (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 } while (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
180
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
181 return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 gtk_any_widget_or_parent_to_frame (struct device *d, GtkWidget *widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
186 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
187 return (gtk_any_window_to_frame (d, GET_GTK_WIDGET_WINDOW (widget)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 struct device *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191 gtk_any_window_to_device (GdkWindow *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 struct device *d = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194 Lisp_Object devcons, concons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 DEVICE_LOOP_NO_BREAK (devcons, concons)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 d = XDEVICE (XCAR (devcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199 if (!DEVICE_GTK_P (d)) continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 if (gtk_any_window_to_frame (d, w))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201 return (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203 return (NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 decode_gtk_frame (Lisp_Object frame)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209 if (NILP (frame))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
210 frame = wrap_frame (selected_frame ());
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211 CHECK_LIVE_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 /* this will also catch dead frames, but putting in the above check
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 results in a more useful error */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 CHECK_GTK_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 return XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 /* window-manager interactions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 gtk_frame_iconified_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225 return (f->iconified);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
229 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 /* frame properties */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
231 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
232
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
233 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234 gtk_frame_property (struct frame *f, Lisp_Object property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
235 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
236 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 if (EQ (Qleft, property) || EQ (Qtop, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
239 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 if (!GET_GTK_WIDGET_WINDOW(shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 return Qzero;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 if (EQ (Qleft, property)) return make_int (x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245 if (EQ (Qtop, property)) return make_int (y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 if (EQ (Qshell_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 return (FRAME_GTK_LISP_WIDGETS (f)[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 if (EQ (Qcontainer_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
252 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
253 return (FRAME_GTK_LISP_WIDGETS (f)[1]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
254 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
255 if (EQ (Qtext_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
256 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
257 return (FRAME_GTK_LISP_WIDGETS (f)[2]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
258 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
259 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 if (EQ (Qwindow_id, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
261 return Fgtk_window_id (wrap_frame (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
263
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
264 return Qunbound;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
265 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
266
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
267 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
268 gtk_internal_frame_property_p (struct frame *f, Lisp_Object property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
269 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
270 return EQ (property, Qleft)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271 || EQ (property, Qtop)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
272 || EQ (Qshell_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
273 || EQ (Qcontainer_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274 || EQ (Qtext_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 || EQ (property, Qwindow_id)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
276 || STRINGP (property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 gtk_frame_properties (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282 Lisp_Object props = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
285
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
286 props = cons3 (Qshell_widget, FRAME_GTK_LISP_WIDGETS (f)[0], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
287 props = cons3 (Qcontainer_widget, FRAME_GTK_LISP_WIDGETS (f)[1], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 props = cons3 (Qtext_widget, FRAME_GTK_LISP_WIDGETS (f)[2], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
290 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
291 props = cons3 (Qwindow_id, Fgtk_window_id (wrap_frame (f)), props);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
294 if (!GET_GTK_WIDGET_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
295 x = y = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 props = cons3 (Qtop, make_int (y), props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300 props = cons3 (Qleft, make_int (x), props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302 return props;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
305
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
306 /* Functions called only from `gtk_set_frame_properties' to set
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 individual properties. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
308
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
309 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
310 gtk_set_frame_text_value (struct frame *UNUSED (f), Ibyte *value,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 void (*func) (gpointer, gchar *),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312 gpointer arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
314 gchar *the_text = (gchar *) value;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316 /* Programmer fuckup or window is not realized yet. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317 if (!func || !arg) return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
318
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319 #ifdef MULE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
321 Ibyte *ptr;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
322
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
323 /* Optimize for common ASCII case */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324 for (ptr = value; *ptr; ptr++)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
325 if (!byte_ascii_p (*ptr))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
326 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
327 char *tmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 C_STRING_TO_EXTERNAL (value, tmp, Qctext);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
329 the_text = tmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
331 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
333 #endif /* MULE */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
334
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
335 (*func) (arg, (gchar *) the_text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
337
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
338 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
339 gtk_set_title_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
340 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
341 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 gtk_window_set_title, FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
348 gtk_set_icon_name_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352 gdk_window_set_icon_name, FRAME_GTK_SHELL_WIDGET (f)->window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 /* Set the initial frame size as specified. This function is used
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
356 when the frame's widgets have not yet been realized.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
357 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
358 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 gtk_set_initial_frame_size (struct frame *f, int x, int y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 unsigned int w, unsigned int h)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
364
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
367 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368 /* Deal with the cell size */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
369 default_face_height_and_width (wrap_frame (f), &geometry.height_inc, &geometry.width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 gdk_window_set_hints (GET_GTK_WIDGET_WINDOW (shell), x, y, 0, 0, 0, 0, GDK_HINT_POS);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374 gtk_window_set_policy (GTK_WINDOW (shell), TRUE, TRUE, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
375 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
377 FRAME_HEIGHT (f) = h;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378 FRAME_WIDTH (f) = w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
380 change_frame_size (f, h, w, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382 GtkRequisition req;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385 gtk_widget_set_usize (FRAME_GTK_SHELL_WIDGET (f), req.width, req.height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
386 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
387 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
389 /* Report that a frame property of frame S is being set or changed.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 If the property is not specially recognized, do nothing.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
391 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
392
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
393 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394 gtk_set_frame_properties (struct frame *f, Lisp_Object plist)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
395 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
396 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 gint width = 0, height = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 gboolean width_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 gboolean height_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400 gboolean x_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
401 gboolean y_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
402 Lisp_Object tail;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
403
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
404 for (tail = plist; !NILP (tail); tail = Fcdr (Fcdr (tail)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406 Lisp_Object prop = Fcar (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 Lisp_Object val = Fcar (Fcdr (tail));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
408
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
409 if (SYMBOLP (prop))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
410 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411 if (EQ (prop, Qfont))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 /* If the value is not a string we silently ignore it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 if (STRINGP (val))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416 Lisp_Object frm, font_spec;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
418 frm = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
421 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
423 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
424 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
426 else if (EQ (prop, Qwidth))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 width = XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430 width_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
431 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 else if (EQ (prop, Qheight))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
436 height = XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437 height_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
438 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
439 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 /* Further kludge the x/y. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441 else if (EQ (prop, Qx))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
442 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
443 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 x = (gint) XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 x_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
446 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
447 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448 else if (EQ (prop, Qy))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
450 CHECK_INT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451 y = (gint) XINT (val);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452 y_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
453 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
454 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
457
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
458 /* Kludge kludge kludge. We need to deal with the size and position
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 specially. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
460 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
461 int size_specified_p = width_specified_p || height_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462 int position_specified_p = x_position_specified_p || y_position_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
463
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
464 if (!width_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465 width = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
466 if (!height_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 height = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469 /* Kludge kludge kludge kludge. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 if (position_specified_p &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471 (!x_position_specified_p || !y_position_specified_p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
473 gint dummy;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
474 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476 (x_position_specified_p ? &dummy : &x),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477 (y_position_specified_p ? &dummy : &y));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
479
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
480 if (!f->init_finished)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
481 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
482 if (size_specified_p || position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483 gtk_set_initial_frame_size (f, x, y, width, height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
484 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
485 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
487 if (size_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
489 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
490
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491 Fset_frame_size (frame, make_int (width), make_int (height), Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
492 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
493 if (position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
494 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
495 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
496
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
497 Fset_frame_position (frame, make_int (x), make_int (y));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
498 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
499 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
500 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
501 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
502
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
503
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
504 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
505 /* widget creation */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
506 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
507 /* Figure out what size the shell widget should initially be,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 and set it. Should be called after the default font has been
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 determined but before the widget has been realized. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511 extern Lisp_Object Vgtk_initial_geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513 #ifndef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
515 get_number (const char **geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
516 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
517 int value = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
518 int mult = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
519
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
520 if (**geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
521 mult = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
522 (*geometry)++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
523 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
524 while (**geometry && isdigit (**geometry)){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
525 value = value * 10 + (**geometry - '0');
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
526 (*geometry)++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
527 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
528 return value * mult;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
529 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
530
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
531 /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
532 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
533
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
534 /**
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
535 * gnome_parse_geometry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
536 * @geometry: geometry string to be parsed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
537 * @xpos: X position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
538 * @ypos: Y position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
539 * @width: pixel width geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
540 * @height: pixel height geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
541 *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
542 * Description:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
543 * Parses the geometry string passed in @geometry, and fills
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
544 * @xpos, @ypos, @width, and @height with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
545 * the corresponding values upon completion of the parse.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
546 * If the parse fails, it should be assumed that @xpos, @ypos, @width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
547 * and @height contain undefined values.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
548 *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
549 * Returns:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
550 * %TRUE if the geometry was successfully parsed, %FALSE otherwise.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
551 **/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
552
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
553 static gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
554 gnome_parse_geometry (const gchar *geometry, gint *xpos,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
555 gint *ypos, gint *width, gint *height)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
556 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
557 int subtract;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
558
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
559 g_return_val_if_fail (xpos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
560 g_return_val_if_fail (ypos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
561 g_return_val_if_fail (width != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
562 g_return_val_if_fail (height != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
563
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
564 *xpos = *ypos = *width = *height = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
565
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
566 if (!geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
567 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
568
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
569 if (*geometry == '=')
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
570 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
571 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
572 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
573 if (isdigit (*geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
574 *width = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
575 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
576 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
577 if (*geometry == 'x' || *geometry == 'X'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
578 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
579 *height = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
580 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
581 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
582 return 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
583 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
584 subtract = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
585 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
586 } else if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
587 subtract = gdk_screen_width ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
588 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
589 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
590 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
591 *xpos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
592 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
593 *xpos = subtract - *xpos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
594 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
595 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
596 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
597 subtract = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
598 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
599 } else if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
600 subtract = gdk_screen_height ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
601 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
602 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
603 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
604 *ypos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
605 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
606 *ypos = subtract - *ypos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
607 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
608 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
609 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
610
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
611 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
612 gtk_initialize_frame_size (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
613 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
614 gint x = 10, y = 10, w = 80, h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
615
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
616 if (STRINGP (Vgtk_initial_geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
617 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
618 if (!gnome_parse_geometry ((char*) XSTRING_DATA (Vgtk_initial_geometry), &x,&y,&w,&h))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
619 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
620 x = y = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
621 w = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
622 h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
623 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
624 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
625
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
626 /* set the position of the frame's root window now. When the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
627 frame was created, the position was initialized to (0,0). */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
628 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
629 struct window *win = XWINDOW (f->root_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
630
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
631 WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
632 WINDOW_TOP (win) = FRAME_TOP_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
633
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
634 if (!NILP (f->minibuffer_window))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
635 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
636 win = XWINDOW (f->minibuffer_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
637 WINDOW_LEFT (win) = FRAME_LEFT_BORDER_END (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
638 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
639 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
640
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
641 gtk_set_initial_frame_size (f, x, y, w, h);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
642 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
643
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
644 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
645 resize_event_cb (GtkWidget *UNUSED (w), GtkAllocation *allocation,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
646 gpointer user_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
647 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
648 struct frame *f = (struct frame *) user_data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
649
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
650 f->pixwidth = allocation->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
651 f->pixheight = allocation->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
652
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
653 if (FRAME_GTK_TEXT_WIDGET (f)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
654 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
655 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
656
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
657 Fredraw_frame (frame, Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
658 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
659
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
660 return (FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
661 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
662
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
663 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
664 delete_event_cb (GtkWidget *UNUSED (w), GdkEvent *UNUSED (ev),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
665 gpointer user_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
666 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
667 struct frame *f = (struct frame *) user_data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
668 Lisp_Object frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
669
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
670 enqueue_misc_user_event (frame, Qeval, list3 (Qdelete_frame, frame, Qt));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
671
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
672 /* See if tickling the event queue helps us with our delays when
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
673 clicking 'close' */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
674 signal_fake_event ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
675
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
676 return (TRUE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
677 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
678
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
679 extern gboolean emacs_shell_event_handler (GtkWidget *wid, GdkEvent *event, gpointer closure);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
680 extern Lisp_Object build_gtk_object (GtkObject *obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
681
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
682 #ifndef GNOME_IS_APP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
683 #define GNOME_IS_APP(x) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
684 #define gnome_app_set_contents(x,y) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
685 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
686
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
687 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
688 cleanup_deleted_frame (gpointer data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
689 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
690 struct frame *f = (struct frame *) data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
691 Lisp_Object frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
692
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
693 Fdelete_frame (frame, Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
694 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
695
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
696 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
697 extern void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
698 dragndrop_data_received (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
699 GdkDragContext *context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
700 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
701 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
702 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
703 guint info,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
704 guint time);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
705
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
706 extern gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
707 dragndrop_dropped (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
708 GdkDragContext *drag_context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
709 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
710 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
711 guint time,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
712 gpointer user_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
713
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
714 Lisp_Object Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
715
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
716 #define DRAG_SELECTION_DATA_ERROR "Error converting drag data to external format"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
717 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
718 dragndrop_get_drag (GtkWidget *UNUSED (widget),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
719 GdkDragContext *UNUSED (drag_context),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
720 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
721 guint info,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
722 guint UNUSED (time),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
723 gpointer UNUSED (user_data))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
724 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
725 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING, 8,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
726 DRAG_SELECTION_DATA_ERROR,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
727 strlen (DRAG_SELECTION_DATA_ERROR));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
728
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
729 switch (info)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
730 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
731 case TARGET_TYPE_STRING:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
732 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
733 Lisp_Object string = Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
734
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
735 if (!STRINGP (Vcurrent_drag_object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
736 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
737 string = Fprin1_to_string (string, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
738 /* Convert to a string */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
739 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
740
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
741 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
742 8, XSTRING_DATA (string), XSTRING_LENGTH (string));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
743 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
744 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
745 case TARGET_TYPE_URI_LIST:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
746 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
747 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
748 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
749 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
750 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
751 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
752
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
753 DEFUN ("gtk-start-drag-internal", Fgtk_start_drag_internal, 2, 3, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
754 Start a GTK drag from a buffer.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
755 First arg is the event that started the drag,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
756 second arg should be some string, and the third
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
757 is the type of the data (this should be a MIME type as a string (ie: text/plain)).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
758 The type defaults to text/plain.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
759 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
760 (event, data, dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
761 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
762 if (EVENTP(event))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
763 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
764 struct frame *f = decode_gtk_frame (Fselected_frame (Qnil));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
765 GtkWidget *wid = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
766 struct Lisp_Event *lisp_event = XEVENT(event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
767 GdkAtom dnd_typ;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
768 GtkTargetList *tl = gtk_target_list_new (dnd_target_table, dnd_n_targets);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
769
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
770 /* only drag if this is really a press */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
771 if (EVENT_TYPE(lisp_event) != button_press_event)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
772 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
773
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
774 /* get the desired type */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
775 if (!NILP (dtyp) && STRINGP (dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
776 dnd_typ = gdk_atom_intern (XSTRING_DATA (dtyp), FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
777
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
778 gtk_drag_begin (wid, tl, GDK_ACTION_COPY,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
779 EVENT_BUTTON_BUTTON (lisp_event), NULL);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
780
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
781 Vcurrent_drag_object = data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
782
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
783 gtk_target_list_unref (tl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
784 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
785 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
786 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
787 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
788
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
789 /* Creates the widgets for a frame.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
790 lisp_window_id is a Lisp description of an X window or Xt
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
791 widget to parse.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
792
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
793 This function does not map the windows. (That is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
794 done by gtk_popup_frame().)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
795 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
796 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
797 gtk_create_widgets (struct frame *f, Lisp_Object lisp_window_id, Lisp_Object parent)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
798 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
799 const char *name;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
800 GtkWidget *text, *container, *shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
801 gboolean embedded_p = !NILP (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
802 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
803 int menubar_visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
804 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
805
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
806 if (STRINGP (f->name))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
807 TO_EXTERNAL_FORMAT (LISP_STRING, f->name, C_STRING_ALLOCA, name, Qctext);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
808 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
809 name = "emacs";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
810
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
811 FRAME_GTK_TOP_LEVEL_FRAME_P (f) = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
812
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
813 if (embedded_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
814 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
815 CHECK_GTK_OBJECT (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
816
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
817 if (!GTK_IS_CONTAINER (XGTK_OBJECT (lisp_window_id)->object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
818 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
819 invalid_argument ("Window ID must be a GtkContainer subclass", lisp_window_id);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
820 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
821
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
822 shell = gtk_vbox_new (FALSE, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
823
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
824 gtk_object_weakref (GTK_OBJECT (shell), cleanup_deleted_frame, f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
825 gtk_container_add (GTK_CONTAINER (XGTK_OBJECT (lisp_window_id)->object), shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
826 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
827 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
828 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
829 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
830 shell = GTK_WIDGET (gnome_app_new ("XEmacs", "XEmacs/GNOME"));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
831 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
832 shell = GTK_WIDGET (gtk_window_new (GTK_WINDOW_TOPLEVEL));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
833 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
834 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
835
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
836 if (!NILP (parent))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
837 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
838 /* If this is a transient window, keep the parent info around */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
839 GtkWidget *parentwid = FRAME_GTK_SHELL_WIDGET (XFRAME (parent));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
840 gtk_object_set_data (GTK_OBJECT (shell), TRANSIENT_DATA_IDENTIFIER, parentwid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
841 gtk_window_set_transient_for (GTK_WINDOW (shell), GTK_WINDOW (parentwid));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
842 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
843
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
844 gtk_container_set_border_width (GTK_CONTAINER (shell), 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
845
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
846 /* Add a mapping from widget to frame to help widget callbacks quickly find
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
847 their corresponding frame. */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
848 gtk_object_set_data (GTK_OBJECT (shell), GTK_DATA_FRAME_IDENTIFIER, f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
849
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
850 FRAME_GTK_SHELL_WIDGET (f) = shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
851
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
852 text = GTK_WIDGET (gtk_xemacs_new (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
853
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
854 if (!GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
855 container = GTK_WIDGET (gtk_vbox_new (FALSE, INTERNAL_BORDER_WIDTH));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
856 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
857 container = shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
858
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
859 FRAME_GTK_CONTAINER_WIDGET (f) = container;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
860 FRAME_GTK_TEXT_WIDGET (f) = text;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
861
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
862 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
863 gtk_drag_dest_set (text, GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_HIGHLIGHT,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
864 dnd_target_table, dnd_n_targets,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
865 GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
866 gtk_signal_connect (GTK_OBJECT (text), "drag_drop",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
867 GTK_SIGNAL_FUNC (dragndrop_dropped), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
868 gtk_signal_connect (GTK_OBJECT (text), "drag_data_received",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
869 GTK_SIGNAL_FUNC (dragndrop_data_received), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
870 gtk_signal_connect (GTK_OBJECT (text), "drag_data_get",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
871 GTK_SIGNAL_FUNC (dragndrop_get_drag), NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
872 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
873
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
874 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
875 /* Create the initial menubar widget. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
876 menubar_visible = gtk_initialize_frame_menubar (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
877
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
878 if (menubar_visible)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
879 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
880 gtk_widget_show_all (FRAME_GTK_MENUBAR_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
881 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
882 #endif /* HAVE_MENUBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
883
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
884 if (GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
885 gnome_app_set_contents (GNOME_APP (shell), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
886 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
887 /* Now comes the drawing area, which should fill the rest of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
888 ** frame completely.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
889 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
890 gtk_box_pack_end (GTK_BOX (container), text, TRUE, TRUE, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
891
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
892 /* Connect main event handler */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
893 gtk_signal_connect (GTK_OBJECT (shell), "delete-event", GTK_SIGNAL_FUNC (delete_event_cb), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
894
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
895 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
896 static char *events_to_frob[] = { "focus-in-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
897 "focus-out-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
898 "enter-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
899 "leave-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
900 "map-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
901 "unmap-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
902 "property-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
903 "selection-clear-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
904 "selection-request-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
905 "selection-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
906 "client-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
907 /* "configure-event", */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
908 "visibility-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
909 NULL };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
910 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
911
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
912 for (i = 0; events_to_frob[i]; i++)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
913 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
914 gtk_signal_connect (GTK_OBJECT (shell), events_to_frob[i],
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
915 GTK_SIGNAL_FUNC (emacs_shell_event_handler), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
916 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
917 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
918
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
919 gtk_signal_connect (GTK_OBJECT (shell), "size-allocate", GTK_SIGNAL_FUNC (resize_event_cb), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
920
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
921 /* This might be safe to call now... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
922 /* gtk_signal_connect (GTK_OBJECT (shell), "event", GTK_SIGNAL_FUNC (emacs_shell_event_handler), f); */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
923
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
924 /* Let's make sure we get all the events we can */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
925 gtk_widget_set_events (text, GDK_ALL_EVENTS_MASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
926
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
927 if (shell != container)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
928 gtk_container_add (GTK_CONTAINER (shell), container);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
929
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
930 gtk_widget_set_name (shell, "XEmacs::shell");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
931 gtk_widget_set_name (container, "XEmacs::container");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
932 gtk_widget_set_name (text, "XEmacs::text");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
933
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
934 FRAME_GTK_LISP_WIDGETS(f)[0] = build_gtk_object (GTK_OBJECT (shell));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
935 FRAME_GTK_LISP_WIDGETS(f)[1] = build_gtk_object (GTK_OBJECT (container));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
936 FRAME_GTK_LISP_WIDGETS(f)[2] = build_gtk_object (GTK_OBJECT (text));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
937
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
938 gtk_widget_realize (shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
939 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
940
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
941 /* create the windows for the specified frame and display them.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
942 Note that the widgets have already been created, and any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
943 necessary geometry calculations have already been done. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
944 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
945 gtk_popup_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
946 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
947 /* */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
948
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
949 if (gtk_object_get_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)), UNMAPPED_DATA_IDENTIFIER))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
950 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
951 FRAME_GTK_TOTALLY_VISIBLE_P (f) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
952 f->visible = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
953 gtk_widget_realize (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
954 gtk_widget_realize (FRAME_GTK_TEXT_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
955 gtk_widget_hide_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
956 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
957 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
958 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
959 gtk_widget_show_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
960 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
961 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
962
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
963 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
964 allocate_gtk_frame_struct (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
965 {
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
966 int i;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
967
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
968 /* zero out all slots. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
969 f->frame_data = xnew_and_zero (struct gtk_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
970
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
971 /* yeah, except the lisp ones */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
972 FRAME_GTK_ICON_PIXMAP (f) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
973 FRAME_GTK_ICON_PIXMAP_MASK (f) = Qnil;
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
974 FRAME_GTK_MENUBAR_DATA (f) = Qnil;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
975 for (i = 0; i < 3; i++)
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
976 FRAME_GTK_LISP_WIDGETS (f)[i] = Qnil;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
977
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
978 /*
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
979 Hashtables of callback data for glyphs on the frame. Make them EQ because
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
980 we only use ints as keys. Otherwise we run into stickiness in redisplay
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
981 because internal_equal() can QUIT. See enter_redisplay_critical_section().
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
982 */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
983 FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
984 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
985 FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
986 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
987 FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f) =
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
988 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, HASH_TABLE_EQ);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
989 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
990
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
991
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
992 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
993 /* Lisp functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
994 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
995
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
996 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
997 gtk_init_frame_1 (struct frame *f, Lisp_Object props,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
998 int UNUSED (frame_name_is_defaulted))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
999 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1000 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1001 Lisp_Object initially_unmapped;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1002 Lisp_Object device = FRAME_DEVICE (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1003 Lisp_Object lisp_window_id = Fplist_get (props, Qwindow_id, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1004 Lisp_Object popup = Fplist_get (props, Qpopup, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1005
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1006 if (!NILP (popup))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1007 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1008 if (EQ (popup, Qt))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1009 popup = Fselected_frame (device);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1010 CHECK_LIVE_FRAME (popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1011 if (!EQ (device, FRAME_DEVICE (XFRAME (popup))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1012 invalid_argument_2 ("Parent must be on same device as frame",
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1013 device, popup);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1014 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1015
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1016 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1017
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1018 /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1019 * Previously we set this only if NILP (DEVICE_SELECTED_FRAME (d))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1020 * to make sure that messages were displayed as soon as possible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1021 * if we're creating the first frame on a device. But it is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1022 * better to just set this all the time, so that when a new frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1023 * is created that covers the selected frame, echo area status
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1024 * messages can still be seen. f->visible is reset later if the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1025 * initially-unmapped property is found to be non-nil in the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1026 * frame properties.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1027 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1028 f->visible = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1029
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1030 allocate_gtk_frame_struct (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1031 gtk_create_widgets (f, lisp_window_id, popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1032
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1033 if (!NILP (initially_unmapped))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1034 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1035 gtk_object_set_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1036 UNMAPPED_DATA_IDENTIFIER, (gpointer) 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1037 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1038 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1039
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1040 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
1041 gtk_init_frame_2 (struct frame *f, Lisp_Object UNUSED (props))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1042 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1043 /* Set up the values of the widget/frame. A case could be made for putting
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1044 this inside of the widget's initialize method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1045
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1046 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1047 gtk_initialize_frame_size (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1048 /* Kyle:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1049 * update_frame_title() can't be done here, because some of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1050 * modeline specs depend on the frame's device having a selected
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1051 * frame, and that may not have been set up yet. The redisplay
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1052 * will update the frame title anyway, so nothing is lost.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1053 * JV:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1054 * It turns out it gives problems with FVWMs name based mapping.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1055 * We'll just need to be carefull in the modeline specs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1056 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1057 update_frame_title (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1058 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1059
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1060 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1061 gtk_init_frame_3 (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1062 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1063 /* Pop up the frame. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1064 gtk_popup_frame (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1065 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1066
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1067 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1068 gtk_mark_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1069 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1070 mark_object (FRAME_GTK_ICON_PIXMAP (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1071 mark_object (FRAME_GTK_ICON_PIXMAP_MASK (f));
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
1072 mark_object (FRAME_GTK_MENUBAR_DATA (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1073 mark_object (FRAME_GTK_LISP_WIDGETS (f)[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1074 mark_object (FRAME_GTK_LISP_WIDGETS (f)[1]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1075 mark_object (FRAME_GTK_LISP_WIDGETS (f)[2]);
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1076 mark_object (FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f));
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1077 mark_object (FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f));
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1078 mark_object (FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1079 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1080
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1081 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1082 gtk_set_frame_icon (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1083 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1084 GdkPixmap *gtk_pixmap = NULL, *gtk_mask = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1085
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1086 if (IMAGE_INSTANCEP (f->icon)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1087 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1088 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1089 gtk_pixmap = XIMAGE_INSTANCE_GTK_PIXMAP (f->icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1090 gtk_mask = XIMAGE_INSTANCE_GTK_MASK (f->icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1091 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1092 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1093 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1094 gtk_pixmap = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1095 gtk_mask = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1096 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1097
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1098 gdk_window_set_icon (GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f)), NULL, gtk_pixmap, gtk_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1099 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1100
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1101 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1102 gtk_set_frame_pointer (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1103 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1104 GtkWidget *w = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1105 GdkCursor *c = XIMAGE_INSTANCE_GTK_CURSOR (f->pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1106
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1107 if (POINTER_IMAGE_INSTANCEP (f->pointer))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1108 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1109 gdk_window_set_cursor (GET_GTK_WIDGET_WINDOW (w), c);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1110 gdk_flush ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1111 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1112 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1113 {
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1114 /* ABORT()? */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1115 stderr_out ("POINTER_IMAGE_INSTANCEP (f->pointer) failed!\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1116 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1117 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1118
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1119 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1120 gtk_get_frame_parent (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1121 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1122 GtkWidget *parentwid = (GtkWidget*) gtk_object_get_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)),
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1123 TRANSIENT_DATA_IDENTIFIER);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1124
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1125 /* find the frame whose wid is parentwid */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1126 if (parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1127 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1128 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1129 DEVICE_FRAME_LOOP (frmcons, XDEVICE (FRAME_DEVICE (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1130 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1131 Lisp_Object frame = XCAR (frmcons);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1132 if (FRAME_GTK_SHELL_WIDGET (XFRAME (frame)) == parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1133 return frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1134 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1135 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1136 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1137 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1138
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1139 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1140 DEFUN ("gtk-window-id", Fgtk_window_id, 0, 1, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1141 Get the ID of the Gtk window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1142 This gives us a chance to manipulate the Emacs window from within a
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1143 different program. Since the ID is an unsigned long, we return it as
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1144 a string.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1145 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1146 (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1147 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1148 char str[255];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1149 struct frame *f = decode_gtk_frame (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1151 /* Arrrrggghhh... this defeats the whole purpose of using Gdk... do we really need this? */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1152 sprintf (str, "%lu", GDK_WINDOW_XWINDOW( GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1153 return build_string (str);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1154 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1155 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1156
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1157
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1158 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1159 /* manipulating the X window */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1160 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1161
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1162 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1163 gtk_set_frame_position (struct frame *f, int xoff, int yoff)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1164 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1165 gtk_widget_set_uposition (FRAME_GTK_SHELL_WIDGET (f), xoff, yoff);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1166 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1167
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1168 /* Call this to change the size of frame S's x-window. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1169
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1170 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1171 gtk_set_frame_size (struct frame *f, int cols, int rows)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1172 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1173 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1174 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1175
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1176 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1177 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1178 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1179
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1180 /* Update the cell size */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1181 default_face_height_and_width (wrap_frame (f), &geometry.height_inc, &geometry.width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1182
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1183 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1184 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1185 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1186
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1187 change_frame_size (f, rows, cols, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1188
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1189 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1190 GtkRequisition req;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1191
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1192 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1193 gtk_widget_set_usize (FRAME_GTK_SHELL_WIDGET (f), req.width, req.height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1194 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1195 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1196
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1197 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1198 /* There is NO equivalent to XWarpPointer under Gtk */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1199 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1200 gtk_set_mouse_position (struct window *w, int x, int y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1201 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1202 struct frame *f = XFRAME (w->frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1203 Display *display = GDK_DISPLAY ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1204 XWarpPointer (display, None,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1205 GDK_WINDOW_XWINDOW (GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1206 0, 0, 0, 0, w->pixel_left + x, w->pixel_top + y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1207 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1208 #endif /* STUPID_X_SPECIFIC_GTK_STUFF */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1209
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1210 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1211 gtk_get_mouse_position (struct device *d, Lisp_Object *frame, int *x, int *y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1212 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1213 /* Returns the pixel position within the editor text widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1214 gint win_x, win_y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1215 GdkWindow *w = gdk_window_at_pointer (&win_x, &win_y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1216 struct frame *f = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1217
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1218 if (!w) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1219
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1220 /* At this point, w is the innermost GdkWindow containing the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1221 ** pointer and win_x and win_y are the coordinates of that window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1222 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1223 f = gtk_any_window_to_frame (d, w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1224
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1225 if (!f) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1226
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1227 *frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1228
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1229 gdk_window_get_pointer (GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1230 &win_x, &win_y, NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1231
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1232 *x = win_x;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1233 *y = win_y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1234
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1235 return (1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1236 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1237
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1238 static DECLARE_DOESNT_RETURN (gtk_cant_notify_wm_error (void));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1239
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1240 static DOESNT_RETURN
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1241 gtk_cant_notify_wm_error ()
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1242 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1243 signal_error (Qgui_error, "Can't notify window manager of iconification", Qunbound);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1244 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1245
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1246 /* Raise frame F. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1247 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1248 gtk_raise_frame_1 (struct frame *f, int force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1249 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1250 if (FRAME_VISIBLE_P (f) || force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1251 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1252 GdkWindow *emacs_window = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1253
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1254 gdk_window_raise (emacs_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1255 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1256 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1257
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1258 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1259 gtk_raise_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1260 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1261 gtk_raise_frame_1 (f, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1262 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1263
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1264 /* Lower frame F. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1265 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1266 gtk_lower_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1267 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1268 if (FRAME_VISIBLE_P (f))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1269 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1270 gdk_window_lower (GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f)));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1271 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1272 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1273
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1274 /* Change from withdrawn state to mapped state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1275 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1276 gtk_make_frame_visible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1277 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1278 gtk_widget_map (FRAME_GTK_SHELL_WIDGET (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1279 gtk_raise_frame_1 (f, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1280 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1281
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1282 /* Change from mapped state to withdrawn state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1283 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1284 gtk_make_frame_invisible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1285 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1286 gtk_widget_unmap(FRAME_GTK_SHELL_WIDGET (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1287 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1288
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1289 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1290 gtk_frame_visible_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1291 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1292 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1294 f->visible = (GTK_OBJECT_FLAGS (w) & GTK_VISIBLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1295
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1296 return f->visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1297 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1298
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1299 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1300 gtk_frame_totally_visible_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1301 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1302 return FRAME_GTK_TOTALLY_VISIBLE_P (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1303 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1304
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1305 /* Change window state from mapped to iconified. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1306 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1307 gtk_iconify_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1308 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1309 GdkWindow *w = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1310
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1311 /* There is no equivalent to XIconifyWindow in Gtk/Gdk. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1312 if (!XIconifyWindow (GDK_WINDOW_XDISPLAY (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1313 GDK_WINDOW_XWINDOW (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1314 DefaultScreen (GDK_WINDOW_XDISPLAY (w))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1315 gtk_cant_notify_wm_error ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1316
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1317 f->iconified = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1318 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1319
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1320 /* Sets the X focus to frame f. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1321 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1322 gtk_focus_on_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1323 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1324 GtkWidget *shell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1325
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1326 assert (FRAME_GTK_P (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1327
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1328 shell_widget = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1329 if (!GET_GTK_WIDGET_WINDOW (shell_widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1330 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1331
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1332 gtk_widget_grab_focus (shell_widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1333 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1334
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1335 /* Destroy the window of frame S. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1336 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1337 gtk_delete_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1338 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1339 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1340
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1341 gtk_widget_destroy (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1343 if (FRAME_GTK_GEOM_FREE_ME_PLEASE (f))
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1344 xfree (FRAME_GTK_GEOM_FREE_ME_PLEASE (f), char *);
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1346
diff changeset
1345 xfree (f->frame_data, void *);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1346 f->frame_data = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1347 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1348
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1349 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1350 gtk_recompute_cell_sizes (struct frame *frm)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1351 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1352 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (frm)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1353 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1354 GtkWindow *w = GTK_WINDOW (FRAME_GTK_SHELL_WIDGET (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1355 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1356 GdkWindowHints geometry_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1357 gint width_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1358 gint height_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1359
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1360 default_face_height_and_width (wrap_frame (frm), &height_inc, &width_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1361 geometry_mask = GDK_HINT_RESIZE_INC;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1362 geometry.width_inc = width_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1363 geometry.height_inc = height_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1364
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1365 gtk_window_set_geometry_hints (w, FRAME_GTK_TEXT_WIDGET (frm), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1366 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1367 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1368
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1369 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1370 gtk_update_frame_external_traits (struct frame* frm, Lisp_Object name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1371 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1372 Lisp_Object frame = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1373
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1374 frame = wrap_frame (frm);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1375
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1376 if (EQ (name, Qforeground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1377 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1378 Lisp_Object color = FACE_FOREGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1379 GdkColor *fgc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1380
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1381 if (!EQ (color, Vthe_null_color_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1382 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1383 fgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1384 /* #### BILL!!! The X code set the XtNforeground property of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1385 the text widget here. Why did they bother? All that type
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1386 of thing is done down in the guts of the redisplay code,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1387 not in the Emacs* widgets. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1388 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1389 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1390 else if (EQ (name, Qbackground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1391 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1392 Lisp_Object color = FACE_BACKGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1393 GdkColor *bgc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1394
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1395 if (!EQ (color, Vthe_null_color_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1396 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1397 bgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1398 if (FRAME_GTK_SHELL_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1399 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1400 gdk_window_set_background (FRAME_GTK_SHELL_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1401 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1402 if (FRAME_GTK_TEXT_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1403 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1404 gdk_window_set_background (FRAME_GTK_TEXT_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1405 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1406 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1407
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1408 /* Really crappy way to force the modeline shadows to be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1409 redrawn. But effective. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1410 MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1411 MARK_FRAME_CHANGED (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1412 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1413 else if (EQ (name, Qfont))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1414 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1415 Lisp_Object font = FACE_FONT (Vdefault_face, frame, Vcharset_ascii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1416
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1417 if (!EQ (font, Vthe_null_font_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1418 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1419 /* #### BILL!!! The X code set the XtNfont property of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1420 text widget here. Why did they bother? All that type of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1421 thing is done down in the guts of the redisplay code, not
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1422 in the Emacs* widgets. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1423 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1424 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1425 else
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1426 ABORT ();
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1427
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1428 #ifdef HAVE_TOOLBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1429 /* Setting the background clears the entire frame area
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1430 including the toolbar so we force an immediate redraw of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1431 it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1432 if (EQ (name, Qbackground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1433 MAYBE_DEVMETH (XDEVICE (frm->device), redraw_frame_toolbars, (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1434 #endif /* HAVE_TOOLBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1435
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1436 /* Set window manager resize increment hints according to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1437 the new character size */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1438 if (EQ (name, Qfont) && FRAME_GTK_TOP_LEVEL_FRAME_P (frm))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1439 gtk_recompute_cell_sizes (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1440 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1441
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1442
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1443 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1444 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1445 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1446
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1447 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1448 syms_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1449 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1450 DEFSYMBOL (Qtext_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1451 DEFSYMBOL (Qcontainer_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1452 DEFSYMBOL (Qshell_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1453 DEFSYMBOL (Qdetachable_menubar);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1454
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1455 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1456 staticpro (&Vcurrent_drag_object);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1457 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1458 DEFSUBR (Fgtk_start_drag_internal);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1459 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1460 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1461 DEFSUBR (Fgtk_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1462 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1463 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1464
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1465 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1466 console_type_create_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1467 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1468 /* frame methods */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1469 CONSOLE_HAS_METHOD (gtk, init_frame_1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1470 CONSOLE_HAS_METHOD (gtk, init_frame_2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1471 CONSOLE_HAS_METHOD (gtk, init_frame_3);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1472 CONSOLE_HAS_METHOD (gtk, mark_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1473 CONSOLE_HAS_METHOD (gtk, focus_on_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1474 CONSOLE_HAS_METHOD (gtk, delete_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1475 CONSOLE_HAS_METHOD (gtk, get_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1476 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1477 CONSOLE_HAS_METHOD (gtk, set_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1478 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1479 CONSOLE_HAS_METHOD (gtk, raise_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1480 CONSOLE_HAS_METHOD (gtk, lower_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1481 CONSOLE_HAS_METHOD (gtk, make_frame_visible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1482 CONSOLE_HAS_METHOD (gtk, make_frame_invisible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1483 CONSOLE_HAS_METHOD (gtk, iconify_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1484 CONSOLE_HAS_METHOD (gtk, set_frame_size);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1485 CONSOLE_HAS_METHOD (gtk, set_frame_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1486 CONSOLE_HAS_METHOD (gtk, frame_property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1487 CONSOLE_HAS_METHOD (gtk, internal_frame_property_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1488 CONSOLE_HAS_METHOD (gtk, frame_properties);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1489 CONSOLE_HAS_METHOD (gtk, set_frame_properties);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1490 CONSOLE_HAS_METHOD (gtk, set_title_from_ibyte);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1491 CONSOLE_HAS_METHOD (gtk, set_icon_name_from_ibyte);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1492 CONSOLE_HAS_METHOD (gtk, frame_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1493 CONSOLE_HAS_METHOD (gtk, frame_totally_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1494 CONSOLE_HAS_METHOD (gtk, frame_iconified_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1495 CONSOLE_HAS_METHOD (gtk, set_frame_pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1496 CONSOLE_HAS_METHOD (gtk, set_frame_icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1497 CONSOLE_HAS_METHOD (gtk, get_frame_parent);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1498 CONSOLE_HAS_METHOD (gtk, update_frame_external_traits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1499 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1500
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1501 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1502 vars_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1503 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1504 DEFVAR_LISP ("default-gtk-frame-plist", &Vdefault_gtk_frame_plist /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1505 Plist of default frame-creation properties for Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1506 These override what is specified in the resource database and in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1507 `default-frame-plist', but are overridden by the arguments to the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1508 particular call to `make-frame'.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1509
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1510 Note: In many cases, properties of a frame are available as specifiers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1511 instead of through the frame-properties mechanism.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1512
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1513 Here is a list of recognized frame properties, other than those
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1514 documented in `set-frame-properties' (they can be queried and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1515 set at any time, except as otherwise noted):
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1516
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1517 initially-unmapped If non-nil, the frame will not be visible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1518 when it is created. In this case, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1519 need to call `make-frame-visible' to make
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1520 the frame appear.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1521 popup If non-nil, it should be a frame, and this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1522 frame will be created as a "popup" frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1523 whose parent is the given frame. This
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1524 will make the window manager treat the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1525 frame as a dialog box, which may entail
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1526 doing different things (e.g. not asking
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1527 for positioning, and not iconifying
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1528 separate from its parent).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1529 inter-line-space Not currently implemented.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1530 toolbar-shadow-thickness Thickness of toolbar shadows.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1531 background-toolbar-color Color of toolbar background.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1532 bottom-toolbar-shadow-color Color of bottom shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1533 (*Not* specific to the bottom-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1534 top-toolbar-shadow-color Color of top shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1535 (*Not* specific to the top-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1536 internal-border-width Width of internal border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1537 border-width Width of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1538 top Y position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1539 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1540 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1541 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1542 left X position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1543 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1544 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1545 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1546 border-color Color of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1547 cursor-color Color of text cursor.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1548
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1549 See also `default-frame-plist', which specifies properties which apply
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1550 to all frames, not just Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1551 */ );
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1552 Vdefault_gtk_frame_plist = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1553
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1554 gtk_console_methods->device_specific_frame_props = &Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1555 }