annotate src/frame-gtk.c @ 5707:5fd1b9a95531

Improve description of `mark-defun'.
author Stephen J. Turnbull <stephen@xemacs.org>
date Fri, 28 Dec 2012 23:11:32 +0900
parents 56144c8593a8
children
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.
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4982
diff changeset
3 Copyright (C) 1995, 1996, 2002, 2003, 2010 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
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5191
diff changeset
7 XEmacs is free software: you can redistribute it and/or modify it
462
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
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5191
diff changeset
9 Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5191
diff changeset
10 option) any later version.
462
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
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5191
diff changeset
18 along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 /* Synched up with: Not synched with FSF. */
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 /* Substantially rewritten for XEmacs. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23 /* Revamped to use Gdk/Gtk by William Perry */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26 #include "lisp.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
28 #include "buffer.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
29 #include "device-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
30 #include "events.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
31 #include "extents.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
32 #include "faces.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
33 #include "frame-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
34 #include "window.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
35
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
36 #ifdef HAVE_DRAGNDROP
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
37 #include "dragdrop.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
38 #endif
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
39
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
40 #include "elhash.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
41 #include "console-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42 #include "glyphs-gtk.h"
5176
8b2f75cecb89 rename objects* (.c, .h and .el files) to fontcolor*
Ben Wing <ben@xemacs.org>
parents: 5047
diff changeset
43 #include "fontcolor-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 #include "scrollbar-gtk.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
45 #include "ui-gtk.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47 #include "gtk-xemacs.h"
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 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 #include <libgnomeui/libgnomeui.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 #define BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54 #define INTERNAL_BORDER_WIDTH 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56 #define TRANSIENT_DATA_IDENTIFIER "xemacs::transient_for"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57 #define UNMAPPED_DATA_IDENTIFIER "xemacs::initially_unmapped"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 #define STUPID_X_SPECIFIC_GTK_STUFF
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 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4906
diff changeset
62 #include "sysgdkx.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
64
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
65 /* Default properties to use when creating frames. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66 Lisp_Object Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 Lisp_Object Qdetachable_menubar;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69 Lisp_Object Qtext_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 Lisp_Object Qcontainer_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 Lisp_Object Qshell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 EXFUN (Fgtk_window_id, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
76
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
77 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 enum {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 TARGET_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80 TARGET_TYPE_URI_LIST,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
82
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
83 static GtkTargetEntry dnd_target_table[] = {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84 { "STRING", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 { "text/plain", 0, TARGET_TYPE_STRING },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 { "text/uri-list", 0, TARGET_TYPE_URI_LIST },
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 { "_NETSCAPE_URL", 0, TARGET_TYPE_STRING }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 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
91
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
94 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
95 { 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
96 { 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
97 { 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
98 3 },
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
99 { 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
100 { XD_END }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
101 };
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
102
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
103 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
104 DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT ("gtk-frame", gtk_frame,
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
105 0, gtk_frame_data_description_1,
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
106 Lisp_Gtk_Frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
107 #else /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
108 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
109
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
110 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
111 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
112 };
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
113 #endif /* not NEW_GC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
114
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 /* helper functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
120 /* 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
121 struct frame *
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
122 gtk_widget_to_frame (GtkWidget *w)
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 struct frame *f = NULL;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
125
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
126 for (; w; w = w->parent)
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 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
129 GTK_DATA_FRAME_IDENTIFIER)))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
130 return (f);
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
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
133 return (selected_frame());
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
134 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
135
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
136
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 /* Return the Emacs frame-object corresponding to an X window */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 gtk_window_to_frame (struct device *d, GdkWindow *wdesc)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 Lisp_Object tail, frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 struct frame *f;
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 /* This function was previously written to accept only a window argument
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 (and to loop over all devices looking for a matching window), but
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 that is incorrect because window ID's are not unique across displays. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 for (tail = DEVICE_FRAME_LIST (d); CONSP (tail); tail = XCDR (tail))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 frame = XCAR (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 if (!FRAMEP (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 f = XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 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
155 return f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 return 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 /* 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
161 windows */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 gtk_any_window_to_frame (struct device *d, GdkWindow *w)
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 do
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 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 DEVICE_FRAME_LOOP (frmcons, d)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 struct frame *fr = XFRAME (XCAR (frmcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 if ((w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_CONTAINER_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_MENUBAR_WIDGET (fr))) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 (w == GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (fr))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 return (fr);
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 w = gdk_window_get_parent (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 } while (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 return (0);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 gtk_any_widget_or_parent_to_frame (struct device *d, GtkWidget *widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191 return (gtk_any_window_to_frame (d, GET_GTK_WIDGET_WINDOW (widget)));
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194 struct device *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195 gtk_any_window_to_device (GdkWindow *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 struct device *d = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 Lisp_Object devcons, concons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 DEVICE_LOOP_NO_BREAK (devcons, concons)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 d = XDEVICE (XCAR (devcons));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203 if (!DEVICE_GTK_P (d)) continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 if (gtk_any_window_to_frame (d, w))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 return (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 return (NULL);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
210 struct frame *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211 decode_gtk_frame (Lisp_Object frame)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 if (NILP (frame))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
214 frame = wrap_frame (selected_frame ());
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 CHECK_LIVE_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 /* this will also catch dead frames, but putting in the above check
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 results in a more useful error */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218 CHECK_GTK_FRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 return XFRAME (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224 /* window-manager interactions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227 gtk_frame_iconified_p (struct frame *f)
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 return (f->iconified);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 }
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 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234 /* frame properties */
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 gtk_frame_property (struct frame *f, Lisp_Object 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 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 if (EQ (Qleft, property) || EQ (Qtop, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245 if (!GET_GTK_WIDGET_WINDOW(shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246 return Qzero;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
248 if (EQ (Qleft, property)) return make_fixnum (x);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
249 if (EQ (Qtop, property)) return make_fixnum (y);
462
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 (Qshell_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)[0]);
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 (Qcontainer_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)[1]);
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 if (EQ (Qtext_widget, property))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
261 return (FRAME_GTK_LISP_WIDGETS (f)[2]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
263 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
264 if (EQ (Qwindow_id, property))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
265 return Fgtk_window_id (wrap_frame (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
266 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
267
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
268 return Qunbound;
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271 static int
3087
dbd2a866e38a [xemacs-hg @ 2005-11-22 11:24:40 by malcolmp]
malcolmp
parents: 2500
diff changeset
272 gtk_internal_frame_property_p (struct frame *UNUSED(f), Lisp_Object property)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
273 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274 return EQ (property, Qleft)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 || EQ (property, Qtop)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
276 || EQ (Qshell_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 || EQ (Qcontainer_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278 || EQ (Qtext_widget, property)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279 || EQ (property, Qwindow_id)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 || STRINGP (property);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 gtk_frame_properties (struct frame *f)
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 Lisp_Object props = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
287 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 gint x, y;
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 props = cons3 (Qshell_widget, FRAME_GTK_LISP_WIDGETS (f)[0], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
291 props = cons3 (Qcontainer_widget, FRAME_GTK_LISP_WIDGETS (f)[1], props);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 props = cons3 (Qtext_widget, FRAME_GTK_LISP_WIDGETS (f)[2], props);
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 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
295 props = cons3 (Qwindow_id, Fgtk_window_id (wrap_frame (f)), props);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 if (!GET_GTK_WIDGET_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 x = y = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell), &x, &y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
303 props = cons3 (Qtop, make_fixnum (y), props);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
304 props = cons3 (Qleft, make_fixnum (x), props);
462
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 return props;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
310 /* Functions called only from `gtk_set_frame_properties' to set
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 individual properties. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
314 gtk_set_frame_text_value (struct frame *UNUSED (f), Ibyte *value,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315 void (*func) (gpointer, gchar *),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316 gpointer arg)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
318 gchar *the_text = (gchar *) value;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 /* Programmer fuckup or window is not realized yet. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
321 if (!func || !arg) return;
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 #ifdef MULE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
325 Ibyte *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 /* Optimize for common ASCII case */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 for (ptr = value; *ptr; ptr++)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 809
diff changeset
329 if (!byte_ascii_p (*ptr))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330 {
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
331 char *tmp = ITEXT_TO_EXTERNAL (value, Qctext);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 the_text = tmp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
333 break;
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 #endif /* MULE */
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 (*func) (arg, (gchar *) the_text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
339 }
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 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
342 gtk_set_title_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347 gtk_window_set_title, FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
348 }
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 static void
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
351 gtk_set_icon_name_from_ibyte (struct frame *f, Ibyte *name)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353 gtk_set_frame_text_value (f, name,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354 (void (*)(gpointer, gchar *))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 gdk_window_set_icon_name, FRAME_GTK_SHELL_WIDGET (f)->window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
356 }
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 /* Set the initial frame size as specified. This function is used
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 when the frame's widgets have not yet been realized.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362 gtk_set_initial_frame_size (struct frame *f, int x, int y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 unsigned int w, unsigned int h)
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 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
370 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 /* Deal with the cell size */
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
372 default_face_width_and_height (wrap_frame (f), &geometry.width_inc, &geometry.height_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
375 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376 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
377 gtk_window_set_policy (GTK_WINDOW (shell), TRUE, TRUE, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378 }
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 FRAME_HEIGHT (f) = h;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 FRAME_WIDTH (f) = w;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4982
diff changeset
383 change_frame_size (f, w, h, 0);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385 GtkRequisition req;
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 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388 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
389 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 }
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 /* 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
393 If the property is not specially recognized, do nothing.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394 */
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 gtk_set_frame_properties (struct frame *f, Lisp_Object plist)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 gint x, y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400 gint width = 0, height = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
401 gboolean width_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
402 gboolean height_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
403 gboolean x_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
404 gboolean y_position_specified_p = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405 Lisp_Object tail;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 for (tail = plist; !NILP (tail); tail = Fcdr (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 Lisp_Object prop = Fcar (tail);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
410 Lisp_Object val = Fcar (Fcdr (tail));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 if (SYMBOLP (prop))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 if (EQ (prop, Qfont))
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 /* If the value is not a string we silently ignore it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417 if (STRINGP (val))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
418 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 Lisp_Object frm, font_spec;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
421 frm = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 font_spec = Fget (Fget_face (Qdefault), Qfont, Qnil);
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 Fadd_spec_to_specifier (font_spec, val, frm, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
426 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 else if (EQ (prop, Qwidth))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430 {
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
431 CHECK_FIXNUM (val);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
432 width = XFIXNUM (val);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 width_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
436 else if (EQ (prop, Qheight))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437 {
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
438 CHECK_FIXNUM (val);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
439 height = XFIXNUM (val);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 height_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441 continue;
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 /* Further kludge the x/y. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 else if (EQ (prop, Qx))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 {
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
446 CHECK_FIXNUM (val);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
447 x = (gint) XFIXNUM (val);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448 x_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449 continue;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
450 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451 else if (EQ (prop, Qy))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452 {
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
453 CHECK_FIXNUM (val);
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
454 y = (gint) XFIXNUM (val);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 y_position_specified_p = TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 continue;
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 }
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 /* Kludge kludge kludge. We need to deal with the size and position
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462 specially. */
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 int size_specified_p = width_specified_p || height_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465 int position_specified_p = x_position_specified_p || y_position_specified_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
466
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 if (!width_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468 width = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469 if (!height_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 height = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472 /* Kludge kludge kludge kludge. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
473 if (position_specified_p &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
474 (!x_position_specified_p || !y_position_specified_p))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476 gint dummy;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478 gdk_window_get_deskrelative_origin (GET_GTK_WIDGET_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
479 (x_position_specified_p ? &dummy : &x),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
480 (y_position_specified_p ? &dummy : &y));
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483 if (!f->init_finished)
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 if (size_specified_p || position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486 gtk_set_initial_frame_size (f, x, y, width, height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
487 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
489 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
490 if (size_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
492 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
493
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
494 Fset_frame_size (frame, make_fixnum (width), make_fixnum (height), Qnil);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
495 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
496 if (position_specified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
497 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
498 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
499
5581
56144c8593a8 Mechanically change INT to FIXNUM in our sources.
Aidan Kehoe <kehoea@parhasard.net>
parents: 5474
diff changeset
500 Fset_frame_position (frame, make_fixnum (x), make_fixnum (y));
462
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
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 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 /* widget creation */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510 /* Figure out what size the shell widget should initially be,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511 and set it. Should be called after the default font has been
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512 determined but before the widget has been realized. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 extern Lisp_Object Vgtk_initial_geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
515
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
516 #ifndef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
517 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
518 get_number (const char **geometry)
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 int value = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
521 int mult = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
522
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
523 if (**geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
524 mult = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
525 (*geometry)++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
526 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
527 while (**geometry && isdigit (**geometry)){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
528 value = value * 10 + (**geometry - '0');
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
529 (*geometry)++;
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 return value * mult;
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 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
536
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
537 /**
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
538 * gnome_parse_geometry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
539 * @geometry: geometry string to be parsed
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
540 * @xpos: X position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
541 * @ypos: Y position geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
542 * @width: pixel width geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
543 * @height: pixel height geometry component
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
544 *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
545 * Description:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
546 * Parses the geometry string passed in @geometry, and fills
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
547 * @xpos, @ypos, @width, and @height with
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
548 * the corresponding values upon completion of the parse.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
549 * If the parse fails, it should be assumed that @xpos, @ypos, @width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
550 * and @height contain undefined values.
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 * Returns:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
553 * %TRUE if the geometry was successfully parsed, %FALSE otherwise.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
554 **/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
555
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
556 static gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
557 gnome_parse_geometry (const gchar *geometry, gint *xpos,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
558 gint *ypos, gint *width, gint *height)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
559 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
560 int subtract;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
561
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
562 g_return_val_if_fail (xpos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
563 g_return_val_if_fail (ypos != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
564 g_return_val_if_fail (width != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
565 g_return_val_if_fail (height != NULL, FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
566
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
567 *xpos = *ypos = *width = *height = -1;
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 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
571
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
572 if (*geometry == '=')
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
573 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
574 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
575 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
576 if (isdigit (*geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
577 *width = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
578 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
579 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
580 if (*geometry == 'x' || *geometry == 'X'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
581 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
582 *height = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
583 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
584 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
585 return 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
586 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
587 subtract = 0;
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 if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
590 subtract = gdk_screen_width ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
591 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
592 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
593 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
594 *xpos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
595 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
596 *xpos = subtract - *xpos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
597 if (!*geometry)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
598 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
599 if (*geometry == '+'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
600 subtract = 0;
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 if (*geometry == '-'){
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
603 subtract = gdk_screen_height ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
604 geometry++;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
605 } else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
606 return FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
607 *ypos = get_number (&geometry);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
608 if (subtract)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
609 *ypos = subtract - *ypos;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
610 return TRUE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
611 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
612 #endif
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
615 gtk_initialize_frame_size (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
616 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
617 gint x = 10, y = 10, w = 80, h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
618
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
619 if (STRINGP (Vgtk_initial_geometry))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
620 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
621 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
622 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
623 x = y = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
624 w = 80;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
625 h = 30;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
626 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
627 }
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 /* set the position of the frame's root window now. When the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
630 frame was created, the position was initialized to (0,0). */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
631 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
632 struct window *win = XWINDOW (f->root_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
633
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5047
diff changeset
634 WINDOW_LEFT (win) = FRAME_PANED_LEFT_EDGE (f);
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5047
diff changeset
635 WINDOW_TOP (win) = FRAME_PANED_TOP_EDGE (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
636
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
637 if (!NILP (f->minibuffer_window))
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 win = XWINDOW (f->minibuffer_window);
5090
0ca81354c4c7 Further frame-geometry cleanups
Ben Wing <ben@xemacs.org>
parents: 5047
diff changeset
640 WINDOW_LEFT (win) = FRAME_PANED_LEFT_EDGE (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
641 }
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 gtk_set_initial_frame_size (f, x, y, w, h);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
645 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
646
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
647 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
648 resize_event_cb (GtkWidget *UNUSED (w), GtkAllocation *allocation,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
649 gpointer user_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
650 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
651 struct frame *f = (struct frame *) user_data;
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 f->pixwidth = allocation->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
654 f->pixheight = allocation->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
655
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
656 if (FRAME_GTK_TEXT_WIDGET (f)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
657 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
658 Lisp_Object frame = wrap_frame (f);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
659
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
660 Fredraw_frame (frame, Qt);
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 return (FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
664 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
665
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
666 static gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
667 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
668 gpointer user_data)
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 struct frame *f = (struct frame *) user_data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
671 Lisp_Object frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
672
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
673 enqueue_misc_user_event (frame, Qeval, list3 (Qdelete_frame, frame, Qt));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
674
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
675 /* See if tickling the event queue helps us with our delays when
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
676 clicking 'close' */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
677 signal_fake_event ();
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 return (TRUE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
680 }
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 extern gboolean emacs_shell_event_handler (GtkWidget *wid, GdkEvent *event, gpointer closure);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
683 extern Lisp_Object build_gtk_object (GtkObject *obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
684
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
685 #ifndef GNOME_IS_APP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
686 #define GNOME_IS_APP(x) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
687 #define gnome_app_set_contents(x,y) 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
688 #endif
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
691 cleanup_deleted_frame (gpointer data)
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 struct frame *f = (struct frame *) data;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
694 Lisp_Object frame = wrap_frame (f);
462
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 Fdelete_frame (frame, Qt);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
697 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
698
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
699 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
700 extern void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
701 dragndrop_data_received (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
702 GdkDragContext *context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
703 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
704 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
705 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
706 guint info,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
707 guint time);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
708
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
709 extern gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
710 dragndrop_dropped (GtkWidget *widget,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
711 GdkDragContext *drag_context,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
712 gint x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
713 gint y,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
714 guint time,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
715 gpointer user_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
716
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
717 Lisp_Object Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
718
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
719 #define DRAG_SELECTION_DATA_ERROR "Error converting drag data to external format"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
720 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
721 dragndrop_get_drag (GtkWidget *UNUSED (widget),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
722 GdkDragContext *UNUSED (drag_context),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
723 GtkSelectionData *data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
724 guint info,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
725 guint UNUSED (time),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
726 gpointer UNUSED (user_data))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
727 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
728 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING, 8,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
729 DRAG_SELECTION_DATA_ERROR,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
730 strlen (DRAG_SELECTION_DATA_ERROR));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
731
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
732 switch (info)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
733 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
734 case TARGET_TYPE_STRING:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
735 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
736 Lisp_Object string = Vcurrent_drag_object;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
737
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
738 if (!STRINGP (Vcurrent_drag_object))
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 string = Fprin1_to_string (string, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
741 /* Convert to a string */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
742 }
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 gtk_selection_data_set (data, GDK_SELECTION_TYPE_STRING,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
745 8, XSTRING_DATA (string), XSTRING_LENGTH (string));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
746 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
747 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
748 case TARGET_TYPE_URI_LIST:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
749 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
750 default:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
751 break;
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 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
754 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
755
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
756 DEFUN ("gtk-start-drag-internal", Fgtk_start_drag_internal, 2, 3, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
757 Start a GTK drag from a buffer.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
758 First arg is the event that started the drag,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
759 second arg should be some string, and the third
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
760 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
761 The type defaults to text/plain.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
762 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
763 (event, data, dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
764 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
765 if (EVENTP(event))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
766 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
767 struct frame *f = decode_gtk_frame (Fselected_frame (Qnil));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
768 GtkWidget *wid = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
769 struct Lisp_Event *lisp_event = XEVENT(event);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
770 GdkAtom dnd_typ;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
771 GtkTargetList *tl = gtk_target_list_new (dnd_target_table, dnd_n_targets);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
772
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
773 /* only drag if this is really a press */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
774 if (EVENT_TYPE(lisp_event) != button_press_event)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
775 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
776
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
777 /* get the desired type */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
778 if (!NILP (dtyp) && STRINGP (dtyp))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
779 dnd_typ = gdk_atom_intern (XSTRING_DATA (dtyp), FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
780
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
781 gtk_drag_begin (wid, tl, GDK_ACTION_COPY,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
782 EVENT_BUTTON_BUTTON (lisp_event), NULL);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
783
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
784 Vcurrent_drag_object = data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
785
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
786 gtk_target_list_unref (tl);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
787 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
788 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
789 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
790 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
791
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
792 /* Creates the widgets for a frame.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
793 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
794 widget to parse.
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 This function does not map the windows. (That is
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
797 done by gtk_popup_frame().)
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
800 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
801 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
802 const char *name;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
803 GtkWidget *text, *container, *shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
804 gboolean embedded_p = !NILP (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
805 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
806 int menubar_visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
807 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
808
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
809 if (STRINGP (f->name))
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
810 name = LISP_STRING_TO_EXTERNAL (f->name, Qctext);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
811 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
812 name = "emacs";
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
813
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
814 FRAME_GTK_TOP_LEVEL_FRAME_P (f) = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
815
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
816 if (embedded_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
817 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
818 CHECK_GTK_OBJECT (lisp_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
819
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
820 if (!GTK_IS_CONTAINER (XGTK_OBJECT (lisp_window_id)->object))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
821 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
822 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
823 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
824
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
825 shell = gtk_vbox_new (FALSE, 0);
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 gtk_object_weakref (GTK_OBJECT (shell), cleanup_deleted_frame, f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
828 gtk_container_add (GTK_CONTAINER (XGTK_OBJECT (lisp_window_id)->object), shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
829 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
830 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
831 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
832 #ifdef HAVE_GNOME
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
833 shell = GTK_WIDGET (gnome_app_new ("XEmacs", "XEmacs/GNOME"));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
834 #else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
835 shell = GTK_WIDGET (gtk_window_new (GTK_WINDOW_TOPLEVEL));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
836 #endif
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
839 if (!NILP (parent))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
840 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
841 /* If this is a transient window, keep the parent info around */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
842 GtkWidget *parentwid = FRAME_GTK_SHELL_WIDGET (XFRAME (parent));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
843 gtk_object_set_data (GTK_OBJECT (shell), TRANSIENT_DATA_IDENTIFIER, parentwid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
844 gtk_window_set_transient_for (GTK_WINDOW (shell), GTK_WINDOW (parentwid));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
845 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
846
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
847 gtk_container_set_border_width (GTK_CONTAINER (shell), 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
848
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
849 /* 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
850 their corresponding frame. */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
851 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
852
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
853 FRAME_GTK_SHELL_WIDGET (f) = shell;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
854
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
855 text = GTK_WIDGET (gtk_xemacs_new (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
856
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
857 if (!GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
858 container = GTK_WIDGET (gtk_vbox_new (FALSE, INTERNAL_BORDER_WIDTH));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
859 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
860 container = shell;
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 FRAME_GTK_CONTAINER_WIDGET (f) = container;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
863 FRAME_GTK_TEXT_WIDGET (f) = text;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
864
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
865 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
866 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
867 dnd_target_table, dnd_n_targets,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
868 GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_ASK);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
869 gtk_signal_connect (GTK_OBJECT (text), "drag_drop",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
870 GTK_SIGNAL_FUNC (dragndrop_dropped), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
871 gtk_signal_connect (GTK_OBJECT (text), "drag_data_received",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
872 GTK_SIGNAL_FUNC (dragndrop_data_received), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
873 gtk_signal_connect (GTK_OBJECT (text), "drag_data_get",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
874 GTK_SIGNAL_FUNC (dragndrop_get_drag), NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
875 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
876
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
877 #ifdef HAVE_MENUBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
878 /* Create the initial menubar widget. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
879 menubar_visible = gtk_initialize_frame_menubar (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
880
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
881 if (menubar_visible)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
882 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
883 gtk_widget_show_all (FRAME_GTK_MENUBAR_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
884 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
885 #endif /* HAVE_MENUBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
886
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
887 if (GNOME_IS_APP (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
888 gnome_app_set_contents (GNOME_APP (shell), text);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
889 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
890 /* Now comes the drawing area, which should fill the rest of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
891 ** frame completely.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
892 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
893 gtk_box_pack_end (GTK_BOX (container), text, TRUE, TRUE, 0);
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 /* Connect main event handler */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
896 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
897
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
898 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
899 static char *events_to_frob[] = { "focus-in-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
900 "focus-out-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
901 "enter-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
902 "leave-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
903 "map-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
904 "unmap-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
905 "property-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
906 "selection-clear-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
907 "selection-request-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
908 "selection-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
909 "client-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
910 /* "configure-event", */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
911 "visibility-notify-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
912 NULL };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
913 int i;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
914
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
915 for (i = 0; events_to_frob[i]; i++)
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 gtk_signal_connect (GTK_OBJECT (shell), events_to_frob[i],
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
918 GTK_SIGNAL_FUNC (emacs_shell_event_handler), f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
919 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
922 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
923
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
924 /* This might be safe to call now... */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
925 /* 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
926
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
927 /* Let's make sure we get all the events we can */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
928 gtk_widget_set_events (text, GDK_ALL_EVENTS_MASK);
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 if (shell != container)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
931 gtk_container_add (GTK_CONTAINER (shell), container);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
932
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
933 gtk_widget_set_name (shell, "XEmacs::shell");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
934 gtk_widget_set_name (container, "XEmacs::container");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
935 gtk_widget_set_name (text, "XEmacs::text");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
936
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
937 FRAME_GTK_LISP_WIDGETS(f)[0] = build_gtk_object (GTK_OBJECT (shell));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
938 FRAME_GTK_LISP_WIDGETS(f)[1] = build_gtk_object (GTK_OBJECT (container));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
939 FRAME_GTK_LISP_WIDGETS(f)[2] = build_gtk_object (GTK_OBJECT (text));
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 gtk_widget_realize (shell);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
942 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
943
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
944 /* create the windows for the specified frame and display them.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
945 Note that the widgets have already been created, and any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
946 necessary geometry calculations have already been done. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
947 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
948 gtk_popup_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
949 {
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
952 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
953 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
954 FRAME_GTK_TOTALLY_VISIBLE_P (f) = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
955 f->visible = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
956 gtk_widget_realize (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
957 gtk_widget_realize (FRAME_GTK_TEXT_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
958 gtk_widget_hide_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
959 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
960 else
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 gtk_widget_show_all (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
963 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
964 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
965
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
966 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
967 allocate_gtk_frame_struct (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
968 {
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
969 int i;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
970
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
971 /* zero out all slots. */
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
972 #ifdef NEW_GC
5127
a9c41067dd88 more cleanups, terminology clarification, lots of doc work
Ben Wing <ben@xemacs.org>
parents: 5126
diff changeset
973 f->frame_data = XGTK_FRAME (ALLOC_NORMAL_LISP_OBJECT (gtk_frame));
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
974 #else /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
975 f->frame_data = xnew_and_zero (struct gtk_frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
976 #endif /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
977
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
978 /* yeah, except the lisp ones */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
979 FRAME_GTK_ICON_PIXMAP (f) = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
980 FRAME_GTK_ICON_PIXMAP_MASK (f) = Qnil;
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
981 FRAME_GTK_MENUBAR_DATA (f) = Qnil;
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
982 for (i = 0; i < 3; i++)
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1318
diff changeset
983 FRAME_GTK_LISP_WIDGETS (f)[i] = Qnil;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
984
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
985 /*
4906
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
986 Hashtables of callback data for glyphs on the frame. [[ Make them EQ
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
987 because we only use ints as keys. Otherwise we run into stickiness in
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
988 redisplay because internal_equal() can QUIT. See
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
989 enter_redisplay_critical_section() ]] -- probably not true any more,
6ef8256a020a implement equalp in C, fix case-folding, add equal() method for keymaps
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
990 now that we have internal_equal_trapping_problems(). --ben
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
991 */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
992 FRAME_GTK_WIDGET_INSTANCE_HASH_TABLE (f) =
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
993 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
994 FRAME_GTK_WIDGET_CALLBACK_HASH_TABLE (f) =
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
995 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
996 FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f) =
5191
71ee43b8a74d Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
Aidan Kehoe <kehoea@parhasard.net>
parents: 5178
diff changeset
997 make_lisp_hash_table (50, HASH_TABLE_VALUE_WEAK, Qeq);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
998 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1001 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1002 /* Lisp functions */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1003 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1004
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1005 static void
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
1006 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
1007 int UNUSED (frame_name_is_defaulted))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1008 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1009 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1010 Lisp_Object initially_unmapped;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1011 Lisp_Object device = FRAME_DEVICE (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1012 Lisp_Object lisp_window_id = Fplist_get (props, Qwindow_id, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1013 Lisp_Object popup = Fplist_get (props, Qpopup, Qnil);
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 if (!NILP (popup))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1016 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1017 if (EQ (popup, Qt))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1018 popup = Fselected_frame (device);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1019 CHECK_LIVE_FRAME (popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1020 if (!EQ (device, FRAME_DEVICE (XFRAME (popup))))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1021 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
1022 device, popup);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1023 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1024
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1025 initially_unmapped = Fplist_get (props, Qinitially_unmapped, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1026
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 * Previously we set this only if NILP (DEVICE_SELECTED_FRAME (d))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1029 * to make sure that messages were displayed as soon as possible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1030 * 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
1031 * 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
1032 * is created that covers the selected frame, echo area status
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1033 * messages can still be seen. f->visible is reset later if the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1034 * initially-unmapped property is found to be non-nil in the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1035 * frame properties.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1036 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1037 f->visible = 1;
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 allocate_gtk_frame_struct (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1040 gtk_create_widgets (f, lisp_window_id, popup);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1041
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1042 if (!NILP (initially_unmapped))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1043 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1044 gtk_object_set_data (GTK_OBJECT (FRAME_GTK_SHELL_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1045 UNMAPPED_DATA_IDENTIFIER, (gpointer) 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1046 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1047 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1048
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1049 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
1050 gtk_init_frame_2 (struct frame *f, Lisp_Object UNUSED (props))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1051 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1052 /* 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
1053 this inside of the widget's initialize method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1054
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1055 update_frame_face_values (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1056 gtk_initialize_frame_size (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1057 /* Kyle:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1058 * update_frame_title() can't be done here, because some of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1059 * modeline specs depend on the frame's device having a selected
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1060 * frame, and that may not have been set up yet. The redisplay
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1061 * will update the frame title anyway, so nothing is lost.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1062 * JV:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1063 * It turns out it gives problems with FVWMs name based mapping.
5384
3889ef128488 Fix misspelled words, and some grammar, across the entire source tree.
Jerry James <james@xemacs.org>
parents: 5191
diff changeset
1064 * We'll just need to be careful in the modeline specs.
462
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 update_frame_title (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1067 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1068
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1069 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1070 gtk_init_frame_3 (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1071 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1072 /* Pop up the frame. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1073 gtk_popup_frame (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1074 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1075
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1076 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1077 gtk_mark_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1078 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1079 mark_object (FRAME_GTK_ICON_PIXMAP (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1080 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
1081 mark_object (FRAME_GTK_MENUBAR_DATA (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1082 mark_object (FRAME_GTK_LISP_WIDGETS (f)[0]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1083 mark_object (FRAME_GTK_LISP_WIDGETS (f)[1]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1084 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
1085 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
1086 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
1087 mark_object (FRAME_GTK_WIDGET_CALLBACK_EX_HASH_TABLE (f));
462
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1090 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1091 gtk_set_frame_icon (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1092 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1093 GdkPixmap *gtk_pixmap = NULL, *gtk_mask = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1094
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1095 if (IMAGE_INSTANCEP (f->icon)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1096 && IMAGE_INSTANCE_PIXMAP_TYPE_P (XIMAGE_INSTANCE (f->icon)))
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 gtk_pixmap = XIMAGE_INSTANCE_GTK_PIXMAP (f->icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1099 gtk_mask = XIMAGE_INSTANCE_GTK_MASK (f->icon);
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 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1102 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1103 gtk_pixmap = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1104 gtk_mask = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1105 }
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 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
1108 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1109
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1110 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1111 gtk_set_frame_pointer (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1112 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1113 GtkWidget *w = FRAME_GTK_TEXT_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1114 GdkCursor *c = XIMAGE_INSTANCE_GTK_CURSOR (f->pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1115
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1116 if (POINTER_IMAGE_INSTANCEP (f->pointer))
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 gdk_window_set_cursor (GET_GTK_WIDGET_WINDOW (w), c);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1119 gdk_flush ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1120 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1121 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1122 {
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1123 /* ABORT()? */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1124 stderr_out ("POINTER_IMAGE_INSTANCEP (f->pointer) failed!\n");
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1125 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1126 }
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 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1129 gtk_get_frame_parent (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1130 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1131 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
1132 TRANSIENT_DATA_IDENTIFIER);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1133
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1134 /* find the frame whose wid is parentwid */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1135 if (parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1136 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1137 Lisp_Object frmcons;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1138 DEVICE_FRAME_LOOP (frmcons, XDEVICE (FRAME_DEVICE (f)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1139 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1140 Lisp_Object frame = XCAR (frmcons);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1141 if (FRAME_GTK_SHELL_WIDGET (XFRAME (frame)) == parentwid)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1142 return frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1143 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1144 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1145 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1146 }
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 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1149 DEFUN ("gtk-window-id", Fgtk_window_id, 0, 1, 0, /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1150 Get the ID of the Gtk window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1151 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
1152 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
1153 a string.
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 (frame))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1156 {
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
1157 Ascbyte str[255];
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1158 struct frame *f = decode_gtk_frame (frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1159
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1160 /* 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
1161 sprintf (str, "%lu", GDK_WINDOW_XWINDOW( GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))));
4952
19a72041c5ed Mule-izing, various fixes related to char * arguments
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
1162 return build_ascstring (str);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1163 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1164 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1165
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 /* manipulating the 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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1171 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1172 gtk_set_frame_position (struct frame *f, int xoff, int yoff)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1173 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1174 gtk_widget_set_uposition (FRAME_GTK_SHELL_WIDGET (f), xoff, yoff);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1177 /* Call this to change the size of frame S's x-window. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1178
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1179 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1180 gtk_set_frame_size (struct frame *f, int cols, int rows)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1181 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1182 GtkWidget *shell = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1183 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1184
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1185 if (GTK_IS_WINDOW (shell))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1186 {
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1187 GdkWindowHints geometry_mask = GDK_HINT_RESIZE_INC;
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1726
diff changeset
1188
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1189 /* Update the cell size */
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
1190 default_face_width_and_height (wrap_frame (f), &geometry.width_inc,
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
1191 &geometry.height_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1192
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1193 gtk_window_set_geometry_hints (GTK_WINDOW (shell),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1194 FRAME_GTK_TEXT_WIDGET (f), &geometry, geometry_mask);
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
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4982
diff changeset
1197 change_frame_size (f, cols, rows, 0);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1198
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1199 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1200 GtkRequisition req;
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 gtk_widget_size_request (FRAME_GTK_SHELL_WIDGET (f), &req);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1203 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
1204 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1205 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1206
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1207 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1208 /* There is NO equivalent to XWarpPointer under Gtk */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1209 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1210 gtk_set_mouse_position (struct window *w, int x, int y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1211 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1212 struct frame *f = XFRAME (w->frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1213 Display *display = GDK_DISPLAY ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1214 XWarpPointer (display, None,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1215 GDK_WINDOW_XWINDOW (GET_GTK_WIDGET_WINDOW (FRAME_GTK_TEXT_WIDGET (f))),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1216 0, 0, 0, 0, w->pixel_left + x, w->pixel_top + y);
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 #endif /* STUPID_X_SPECIFIC_GTK_STUFF */
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 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1221 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
1222 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1223 /* Returns the pixel position within the editor text widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1224 gint win_x, win_y;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1225 GdkWindow *w = gdk_window_at_pointer (&win_x, &win_y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1226 struct frame *f = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1227
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1228 if (!w) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1229
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1230 /* At this point, w is the innermost GdkWindow containing the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1231 ** 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
1232 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1233 f = gtk_any_window_to_frame (d, w);
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 if (!f) return (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1236
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1237 *frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1238
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1239 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
1240 &win_x, &win_y, NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1241
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1242 *x = win_x;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1243 *y = win_y;
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 return (1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1246 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1247
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1248 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
1249
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1250 static DOESNT_RETURN
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2195
diff changeset
1251 gtk_cant_notify_wm_error ()
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1252 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1253 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
1254 }
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 /* Raise frame F. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1257 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1258 gtk_raise_frame_1 (struct frame *f, int force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1259 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1260 if (FRAME_VISIBLE_P (f) || force)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1261 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1262 GdkWindow *emacs_window = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
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 gdk_window_raise (emacs_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1265 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1266 }
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1269 gtk_raise_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1270 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1271 gtk_raise_frame_1 (f, 1);
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 /* Lower frame F. */
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_lower_frame (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1277 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1278 if (FRAME_VISIBLE_P (f))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1279 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1280 gdk_window_lower (GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f)));
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1283
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1284 /* Change from withdrawn state to mapped state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1285 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1286 gtk_make_frame_visible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1287 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1288 gtk_widget_map (FRAME_GTK_SHELL_WIDGET (f));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1289 gtk_raise_frame_1 (f, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1290 }
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 /* Change from mapped state to withdrawn state. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1293 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1294 gtk_make_frame_invisible (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1295 {
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
1296 gtk_widget_unmap(FRAME_GTK_SHELL_WIDGET (f));
462
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_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 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (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 f->visible = (GTK_OBJECT_FLAGS (w) & GTK_VISIBLE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1305
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1306 return f->visible;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1307 }
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 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1310 gtk_frame_totally_visible_p (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1311 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1312 return FRAME_GTK_TOTALLY_VISIBLE_P (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1313 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1314
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1315 /* Change window state from mapped to iconified. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1316 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1317 gtk_iconify_frame (struct frame *f)
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 GdkWindow *w = GET_GTK_WIDGET_WINDOW (FRAME_GTK_SHELL_WIDGET (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1320
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1321 /* There is no equivalent to XIconifyWindow in Gtk/Gdk. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1322 if (!XIconifyWindow (GDK_WINDOW_XDISPLAY (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1323 GDK_WINDOW_XWINDOW (w),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1324 DefaultScreen (GDK_WINDOW_XDISPLAY (w))))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1325 gtk_cant_notify_wm_error ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1326
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1327 f->iconified = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1328 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1329
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1330 /* Sets the X focus to frame f. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1331 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1332 gtk_focus_on_frame (struct frame *f)
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 GtkWidget *shell_widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1335
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1336 assert (FRAME_GTK_P (f));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1337
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1338 shell_widget = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1339 if (!GET_GTK_WIDGET_WINDOW (shell_widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1340 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1341
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1342 gtk_widget_grab_focus (shell_widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1343 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1344
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1345 /* Destroy the window of frame S. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1346 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1347 gtk_delete_frame (struct frame *f)
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 GtkWidget *w = FRAME_GTK_SHELL_WIDGET (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1350
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1351 gtk_widget_destroy (w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1352
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1353 if (FRAME_GTK_GEOM_FREE_ME_PLEASE (f))
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
1354 xfree (FRAME_GTK_GEOM_FREE_ME_PLEASE (f));
4117
229bd619740a [xemacs-hg @ 2007-08-15 11:06:02 by crestani]
crestani
parents: 3676
diff changeset
1355 #ifndef NEW_GC
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
1356 xfree (f->frame_data);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1357 #endif /* not NEW_GC */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1358 f->frame_data = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1359 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1360
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1361 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1362 gtk_recompute_cell_sizes (struct frame *frm)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1363 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1364 if (GTK_IS_WINDOW (FRAME_GTK_SHELL_WIDGET (frm)))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1365 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1366 GtkWindow *w = GTK_WINDOW (FRAME_GTK_SHELL_WIDGET (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1367 GdkGeometry geometry;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1368 GdkWindowHints geometry_mask;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1369 gint width_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1370 gint height_inc = 10;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1371
5047
07dcc7000bbf put width before height consistently, fix a real bug found in the process
Ben Wing <ben@xemacs.org>
parents: 5043
diff changeset
1372 default_face_width_and_height (wrap_frame (frm), &width_inc, &height_inc);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1373 geometry_mask = GDK_HINT_RESIZE_INC;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1374 geometry.width_inc = width_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1375 geometry.height_inc = height_inc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1376
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1377 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
1378 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1379 }
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1382 gtk_update_frame_external_traits (struct frame* frm, Lisp_Object name)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1383 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1384 Lisp_Object frame = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1385
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
1386 frame = wrap_frame (frm);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1387
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1388 if (EQ (name, Qforeground))
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 Lisp_Object color = FACE_FOREGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1391 GdkColor *fgc;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1392
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1393 if (!EQ (color, Vthe_null_color_instance))
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 fgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1396 /* #### BILL!!! The X code set the XtNforeground property of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1397 the text widget here. Why did they bother? All that type
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1398 of thing is done down in the guts of the redisplay code,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1399 not in the Emacs* widgets. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1400 }
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 else if (EQ (name, Qbackground))
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 Lisp_Object color = FACE_BACKGROUND (Vdefault_face, frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1405 GdkColor *bgc;
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 if (!EQ (color, Vthe_null_color_instance))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1408 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1409 bgc = COLOR_INSTANCE_GTK_COLOR (XCOLOR_INSTANCE (color));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1410 if (FRAME_GTK_SHELL_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1411 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1412 gdk_window_set_background (FRAME_GTK_SHELL_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1413 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1414 if (FRAME_GTK_TEXT_WIDGET (frm)->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1415 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1416 gdk_window_set_background (FRAME_GTK_TEXT_WIDGET (frm)->window, bgc);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1417 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1420 /* Really crappy way to force the modeline shadows to be
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1421 redrawn. But effective. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1422 MARK_FRAME_WINDOWS_STRUCTURE_CHANGED (frm);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1423 MARK_FRAME_CHANGED (frm);
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 if (EQ (name, Qfont))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1426 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1427 Lisp_Object font = FACE_FONT (Vdefault_face, frame, Vcharset_ascii);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1428
3676
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1429 /* It may be that instantiating the font has deleted the frame (will
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1430 happen if the user has specified a charset registry for ASCII that
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1431 isn't available on the server, and our fallback of iso8859-1 isn't
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1432 available; something vanishingly rare.) In that case, return from
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1433 this function. */
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1434
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1435 if (!FRAME_LIVE_P(frm))
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1436 {
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1437 return;
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1438 }
3ef0aaf3dc34 [xemacs-hg @ 2006-11-12 13:40:04 by aidan]
aidan
parents: 3092
diff changeset
1439
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1440 if (!EQ (font, Vthe_null_font_instance))
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 /* #### BILL!!! The X code set the XtNfont property of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1443 text widget here. Why did they bother? All that type of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1444 thing is done down in the guts of the redisplay code, not
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1445 in the Emacs* widgets. */
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1448 else
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
1449 ABORT ();
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1450
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1451 #ifdef HAVE_TOOLBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1452 /* Setting the background clears the entire frame area
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1453 including the toolbar so we force an immediate redraw of
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1454 it. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1455 if (EQ (name, Qbackground))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1456 MAYBE_DEVMETH (XDEVICE (frm->device), redraw_frame_toolbars, (frm));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1457 #endif /* HAVE_TOOLBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1458
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1459 /* Set window manager resize increment hints according to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1460 the new character size */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1461 if (EQ (name, Qfont) && FRAME_GTK_TOP_LEVEL_FRAME_P (frm))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1462 gtk_recompute_cell_sizes (frm);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1466 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1467 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1468 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1469
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1470 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1471 syms_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1472 {
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1473 #ifdef NEW_GC
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 4117
diff changeset
1474 INIT_LISP_OBJECT (gtk_frame);
3092
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1475 #endif /* NEW_GC */
141c2920ea48 [xemacs-hg @ 2005-11-25 01:41:31 by crestani]
crestani
parents: 3087
diff changeset
1476
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1477 DEFSYMBOL (Qtext_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1478 DEFSYMBOL (Qcontainer_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1479 DEFSYMBOL (Qshell_widget);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
1480 DEFSYMBOL (Qdetachable_menubar);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1481
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1482 #ifdef HAVE_DRAGNDROP
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1483 staticpro (&Vcurrent_drag_object);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1484 Vcurrent_drag_object = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1485 DEFSUBR (Fgtk_start_drag_internal);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1486 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1487 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1488 DEFSUBR (Fgtk_window_id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1489 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1490 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1491
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1492 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1493 console_type_create_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1494 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1495 /* frame methods */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1496 CONSOLE_HAS_METHOD (gtk, init_frame_1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1497 CONSOLE_HAS_METHOD (gtk, init_frame_2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1498 CONSOLE_HAS_METHOD (gtk, init_frame_3);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1499 CONSOLE_HAS_METHOD (gtk, mark_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1500 CONSOLE_HAS_METHOD (gtk, focus_on_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1501 CONSOLE_HAS_METHOD (gtk, delete_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1502 CONSOLE_HAS_METHOD (gtk, get_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1503 #ifdef STUPID_X_SPECIFIC_GTK_STUFF
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1504 CONSOLE_HAS_METHOD (gtk, set_mouse_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1505 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1506 CONSOLE_HAS_METHOD (gtk, raise_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1507 CONSOLE_HAS_METHOD (gtk, lower_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1508 CONSOLE_HAS_METHOD (gtk, make_frame_visible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1509 CONSOLE_HAS_METHOD (gtk, make_frame_invisible);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1510 CONSOLE_HAS_METHOD (gtk, iconify_frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1511 CONSOLE_HAS_METHOD (gtk, set_frame_size);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1512 CONSOLE_HAS_METHOD (gtk, set_frame_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1513 CONSOLE_HAS_METHOD (gtk, frame_property);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1514 CONSOLE_HAS_METHOD (gtk, internal_frame_property_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1515 CONSOLE_HAS_METHOD (gtk, frame_properties);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1516 CONSOLE_HAS_METHOD (gtk, set_frame_properties);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1517 CONSOLE_HAS_METHOD (gtk, set_title_from_ibyte);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 826
diff changeset
1518 CONSOLE_HAS_METHOD (gtk, set_icon_name_from_ibyte);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1519 CONSOLE_HAS_METHOD (gtk, frame_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1520 CONSOLE_HAS_METHOD (gtk, frame_totally_visible_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1521 CONSOLE_HAS_METHOD (gtk, frame_iconified_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1522 CONSOLE_HAS_METHOD (gtk, set_frame_pointer);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1523 CONSOLE_HAS_METHOD (gtk, set_frame_icon);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1524 CONSOLE_HAS_METHOD (gtk, get_frame_parent);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1525 CONSOLE_HAS_METHOD (gtk, update_frame_external_traits);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1526 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1527
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1528 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1529 vars_of_frame_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1530 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1531 DEFVAR_LISP ("default-gtk-frame-plist", &Vdefault_gtk_frame_plist /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1532 Plist of default frame-creation properties for Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1533 These override what is specified in the resource database and in
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1534 `default-frame-plist', but are overridden by the arguments to the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1535 particular call to `make-frame'.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1536
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1537 Note: In many cases, properties of a frame are available as specifiers
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1538 instead of through the frame-properties mechanism.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1539
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1540 Here is a list of recognized frame properties, other than those
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1541 documented in `set-frame-properties' (they can be queried and
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1542 set at any time, except as otherwise noted):
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1543
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1544 initially-unmapped If non-nil, the frame will not be visible
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1545 when it is created. In this case, you
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1546 need to call `make-frame-visible' to make
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1547 the frame appear.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1548 popup If non-nil, it should be a frame, and this
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1549 frame will be created as a "popup" frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1550 whose parent is the given frame. This
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1551 will make the window manager treat the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1552 frame as a dialog box, which may entail
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1553 doing different things (e.g. not asking
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1554 for positioning, and not iconifying
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1555 separate from its parent).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1556 inter-line-space Not currently implemented.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1557 toolbar-shadow-thickness Thickness of toolbar shadows.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1558 background-toolbar-color Color of toolbar background.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1559 bottom-toolbar-shadow-color Color of bottom shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1560 (*Not* specific to the bottom-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1561 top-toolbar-shadow-color Color of top shadows on toolbars.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1562 (*Not* specific to the top-toolbar.)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1563 internal-border-width Width of internal border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1564 border-width Width of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1565 top Y position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1566 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1567 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1568 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1569 left X position (in pixels) of the upper-left
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1570 outermost corner of the frame (i.e. the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1571 upper-left of the window-manager
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1572 decorations).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1573 border-color Color of external border around text area.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1574 cursor-color Color of text cursor.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1575
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1576 See also `default-frame-plist', which specifies properties which apply
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1577 to all frames, not just Gtk frames.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1578 */ );
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1579 Vdefault_gtk_frame_plist = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1580
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1581 gtk_console_methods->device_specific_frame_props = &Vdefault_gtk_frame_plist;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1582 }