annotate src/gtk-xemacs.c @ 5084:6afe991b8135

Add a PARSE_KEYWORDS macro, use it in #'make-hash-table. lisp/ChangeLog addition: 2010-03-01 Aidan Kehoe <kehoea@parhasard.net> * cl-seq.el (cl-parsing-keywords): * cl-macs.el (cl-do-arglist): Use the new invalid-keyword-argument error here. src/ChangeLog addition: 2010-03-01 Aidan Kehoe <kehoea@parhasard.net> * lisp.h (PARSE_KEYWORDS): New macro, for parsing keyword arguments from C subrs. * elhash.c (Fmake_hash_table): Use it. * general-slots.h (Q_allow_other_keys): Add this symbol. * eval.c (non_nil_allow_other_keys_p): (invalid_keyword_argument): New functions, called from the keyword argument parsing code. * data.c (init_errors_once_early): Add the new invalid-keyword-argument error here.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 01 Mar 2010 21:05:33 +0000
parents d0c14ea98592
children 8b2f75cecb89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1 /* gtk-xemacs.c
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 ** Description: A widget to encapsulate a XEmacs 'text widget'
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 ** Created by: William M. Perry
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6 ** Copyright (c) 2000 William M. Perry <wmperry@gnu.org>
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
7 ** Copyright (C) 2010 Ben Wing.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 **
4709
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
9 ** This file is part of XEmacs.
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
10 **
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
11 ** XEmacs is free software; you can redistribute it and/or modify it
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
12 ** under the terms of the GNU General Public License as published by the
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
13 ** Free Software Foundation; either version 2, or (at your option) any
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
14 ** later version.
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
15 **
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
16 ** XEmacs is distributed in the hope that it will be useful, but WITHOUT
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
17 ** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
18 ** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
19 ** for more details.
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
20 **
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
21 ** You should have received a copy of the GNU General Public License
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
22 ** along with XEmacs; see the file COPYING. If not, write to
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
23 ** the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
db7068430402 Add explicit GPL v2 or later notices to Bill Perry's code, where such notices
Jerry James <james@xemacs.org>
parents: 3087
diff changeset
24 ** Boston, MA 02111-1301, USA. */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 #include "lisp.h"
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
29
809
285f13b079f3 [xemacs-hg @ 2002-04-07 16:01:30 by wmperry]
wmperry
parents: 793
diff changeset
30 #include "device.h"
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
31 #include "faces.h"
809
285f13b079f3 [xemacs-hg @ 2002-04-07 16:01:30 by wmperry]
wmperry
parents: 793
diff changeset
32 #include "glyphs.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
33 #include "window.h"
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
34
876
890f3cafe600 [xemacs-hg @ 2002-06-23 09:25:11 by stephent]
stephent
parents: 809
diff changeset
35 #include "frame-impl.h"
890f3cafe600 [xemacs-hg @ 2002-06-23 09:25:11 by stephent]
stephent
parents: 809
diff changeset
36 #include "console-gtk-impl.h"
890f3cafe600 [xemacs-hg @ 2002-06-23 09:25:11 by stephent]
stephent
parents: 809
diff changeset
37 #include "device-impl.h"
4908
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
38 #include "gtk-xemacs.h"
b3ce27ca7647 various fixes related to gtk, redisplay-xlike-inc.c
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
39 #include "objects-gtk.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
41 extern Lisp_Object Vmodeline_face;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42 extern Lisp_Object Vscrollbar_on_left_p;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 EXFUN (Fmake_image_instance, 4);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
45
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 static void gtk_xemacs_class_init (GtkXEmacsClass *klass);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47 static void gtk_xemacs_init (GtkXEmacs *xemacs);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48 static void gtk_xemacs_size_allocate (GtkWidget *widget, GtkAllocation *allocaction);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49 static void gtk_xemacs_draw (GtkWidget *widget, GdkRectangle *area);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 static void gtk_xemacs_paint (GtkWidget *widget, GdkRectangle *area);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 static void gtk_xemacs_size_request (GtkWidget *widget, GtkRequisition *requisition);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 static void gtk_xemacs_realize (GtkWidget *widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 static void gtk_xemacs_style_set (GtkWidget *widget, GtkStyle *previous_style);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54 static gint gtk_xemacs_expose (GtkWidget *widget, GdkEventExpose *event);
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 guint
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57 gtk_xemacs_get_type (void)
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 static guint xemacs_type = 0;
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 if (!xemacs_type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
62 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
63 static const GtkTypeInfo xemacs_info =
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 "GtkXEmacs",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66 sizeof (GtkXEmacs),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
67 sizeof (GtkXEmacsClass),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
68 (GtkClassInitFunc) gtk_xemacs_class_init,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
69 (GtkObjectInitFunc) gtk_xemacs_init,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 /* reserved_1 */ NULL,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 /* reserved_2 */ NULL,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72 (GtkClassInitFunc) NULL,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 xemacs_type = gtk_type_unique (gtk_fixed_get_type (), &xemacs_info);
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 return xemacs_type;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
79 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
80
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
81 static GtkWidgetClass *parent_class;
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 void
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 876
diff changeset
84 gtk_xemacs_class_init (GtkXEmacsClass *class_)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 GtkWidgetClass *widget_class;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 876
diff changeset
88 widget_class = (GtkWidgetClass*) class_;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89 parent_class = (GtkWidgetClass *) gtk_type_class (gtk_fixed_get_type ());
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 widget_class->size_allocate = gtk_xemacs_size_allocate;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 widget_class->size_request = gtk_xemacs_size_request;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93 widget_class->draw = gtk_xemacs_draw;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 widget_class->expose_event = gtk_xemacs_expose;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 widget_class->realize = gtk_xemacs_realize;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 widget_class->button_press_event = emacs_gtk_button_event_handler;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97 widget_class->button_release_event = emacs_gtk_button_event_handler;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98 widget_class->key_press_event = emacs_gtk_key_event_handler;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 widget_class->key_release_event = emacs_gtk_key_event_handler;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 widget_class->motion_notify_event = emacs_gtk_motion_event_handler;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 widget_class->style_set = gtk_xemacs_style_set;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
105 gtk_xemacs_init (GtkXEmacs *xemacs)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107 GTK_WIDGET_SET_FLAGS (xemacs, GTK_CAN_FOCUS);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110 GtkWidget*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 gtk_xemacs_new (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 GtkXEmacs *xemacs;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114
2054
91d4c8c65a0f [xemacs-hg @ 2004-05-02 04:06:51 by malcolmp]
malcolmp
parents: 1318
diff changeset
115 xemacs = (GtkXEmacs*) gtk_type_new (gtk_xemacs_get_type ());
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 xemacs->f = f;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 return GTK_WIDGET (xemacs);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 __nuke_background_items (GtkWidget *widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 /* This bit of voodoo is here to get around the annoying flicker
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 when GDK tries to futz with our background pixmap as well as
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126 XEmacs doing it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 We do NOT set the background of this widget window, that way
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 there is NO flickering, etc. The downside is the XEmacs frame
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 appears as 'seethru' when XEmacs is too busy to redraw the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 frame.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
133 Well, wait, we do... otherwise there sre weird 'seethru' areas
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 even when XEmacs does a full redisplay. Most noticable in some
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 areas of the modeline, or in the right-hand-side of the window
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136 between the scrollbar ad n the edge of the window.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 if (widget->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 gdk_window_set_back_pixmap (widget->window, NULL, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 gdk_window_set_back_pixmap (widget->parent->window, NULL, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 gdk_window_set_background (widget->parent->window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143 &widget->style->bg[GTK_STATE_NORMAL]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 gdk_window_set_background (widget->window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 &widget->style->bg[GTK_STATE_NORMAL]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 }
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
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 extern Lisp_Object xemacs_gtk_convert_color(GdkColor *c, GtkWidget *w);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 /* From objects-gtk.c */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 extern Lisp_Object __get_gtk_font_truename (GdkFont *gdk_font, int expandp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 #define convert_font(f) __get_gtk_font_truename (f, 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 744
diff changeset
156 #ifdef SMASH_FACE_FALLBACKS
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 smash_face_fallbacks (struct frame *f, GtkStyle *style)
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 #define FROB(face,prop,slot) do { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 Lisp_Object fallback = Qnil; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 Lisp_Object specifier = Fget (face, prop, Qnil); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 struct Lisp_Specifier *sp = NULL; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 if (NILP (specifier)) continue; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 sp = XSPECIFIER (specifier); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 fallback = sp->fallback; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167 if (EQ (Fcar (Fcar (Fcar (fallback))), Qgtk)) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 fallback = XCDR (fallback); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 if (! NILP (slot)) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 fallback = acons (list1 (Qgtk), \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 slot, \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 fallback); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 set_specifier_fallback (specifier, fallback); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 } while (0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 #define FROB_FACE(face,fg_slot,bg_slot) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 do { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 FROB (face, Qforeground, xemacs_gtk_convert_color (&style->fg_slot[GTK_STATE_NORMAL], FRAME_GTK_SHELL_WIDGET (f))); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 FROB (face, Qbackground, xemacs_gtk_convert_color (&style->bg_slot[GTK_STATE_NORMAL], FRAME_GTK_SHELL_WIDGET (f))); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 if (style->rc_style && style->rc_style->bg_pixmap_name[GTK_STATE_NORMAL]) \
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 FROB (Vdefault_face, Qbackground_pixmap, \
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
182 Fmake_image_instance (build_cistring (style->rc_style->bg_pixmap_name[GTK_STATE_NORMAL]), \
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 f->device, Qnil, make_int (5))); \
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 else \
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 FROB (Vdefault_face, Qbackground_pixmap, Qnil); \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 } \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 } while (0)
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 FROB (Vdefault_face, Qfont, convert_font (style->font));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 FROB_FACE (Vdefault_face, fg, bg);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 FROB_FACE (Vgui_element_face, text, mid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195 #undef FROB
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 #undef FROB_FACE
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 }
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 744
diff changeset
198 #endif /* SMASH_FACE_FALLBACKS */
462
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 #ifdef HAVE_SCROLLBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 smash_scrollbar_specifiers (struct frame *f, GtkStyle *style)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 Lisp_Object frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 int slider_size = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 int hsize, vsize;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 GtkRangeClass *klass;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
209 frame = wrap_frame (f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
210
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
211 klass = (GtkRangeClass *) gtk_type_class (GTK_TYPE_SCROLLBAR);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 slider_size = klass->slider_width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 hsize = slider_size + (style->klass->ythickness * 2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 vsize = slider_size + (style->klass->xthickness * 2);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 style = gtk_style_attach (style,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 GTK_WIDGET (DEVICE_GTK_APP_SHELL (XDEVICE (FRAME_DEVICE (f))))->window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219 Fadd_spec_to_specifier (Vscrollbar_width, make_int (vsize), frame, Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 Fadd_spec_to_specifier (Vscrollbar_height, make_int (hsize), frame, Qnil, Qnil);
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 #endif /* HAVE_SCROLLBARS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223
744
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
224 #ifdef HAVE_TOOLBARS
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
225 extern Lisp_Object Vtoolbar_shadow_thickness;
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
226
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
227 static void
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
228 smash_toolbar_specifiers(struct frame *f, GtkStyle *style)
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
229 {
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
230 Lisp_Object frame;
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
231 GtkStyleClass *klass = (GtkStyleClass *) style->klass;
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
232
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
233 frame = wrap_frame (f);
744
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
234
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
235 Fadd_spec_to_specifier (Vtoolbar_shadow_thickness, make_int (klass->xthickness),
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
236 Qnil, list2 (Qgtk, Qdefault), Qprepend);
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
237 }
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
238 #endif /* HAVE_TOOLBARS */
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
239
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 gtk_xemacs_realize (GtkWidget *widget)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243 parent_class->realize (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 gtk_xemacs_style_set (widget, gtk_widget_get_style (widget));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
245 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
246
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
247 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 gtk_xemacs_style_set (GtkWidget *widget, GtkStyle *previous_style)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 GtkStyle *new_style = gtk_widget_get_style (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 GtkXEmacs *x = GTK_XEMACS (widget);
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 parent_class->style_set (widget, previous_style);
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 (x->f)
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 __nuke_background_items (widget);
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 744
diff changeset
258 #ifdef SMASH_FACE_FALLBACKS
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
259 smash_face_fallbacks (x->f, new_style);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
260 #endif
744
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
261 #ifdef HAVE_SCROLLBARS
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
262 smash_scrollbar_specifiers (x->f, new_style);
744
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
263 #endif
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
264 #ifdef HAVE_TOOLBARS
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
265 smash_toolbar_specifiers (x->f, new_style);
8ae895c67ce7 [xemacs-hg @ 2002-02-04 15:44:37 by wmperry]
wmperry
parents: 462
diff changeset
266 #endif
462
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 }
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 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271 gtk_xemacs_size_request (GtkWidget *widget, GtkRequisition *requisition)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
272 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
273 GtkXEmacs *x = GTK_XEMACS (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274 struct frame *f = GTK_XEMACS_FRAME (x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 int width, height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
276
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 if (f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278 {
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
279 frame_unit_to_pixel_size (f, FRAME_WIDTH (f), FRAME_HEIGHT (f),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 &width, &height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 requisition->width = width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282 requisition->height = height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 else
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 parent_class->size_request (widget, requisition);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
287 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
290 /* Assign a size and position to the child widgets. This differs from the
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
291 super class method in that for all widgets except the scrollbars the size
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
292 and position are not caclulated here. This is because these widgets have
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
293 this function performed for them by the redisplay code (see
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
294 gtk_map_subwindow()). If the superclass method is called then the widgets
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
295 can change size and position as the two pieces of code move the widgets at
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
296 random.
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
297 */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 gtk_xemacs_size_allocate (GtkWidget *widget, GtkAllocation *allocation)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301 GtkXEmacs *x = GTK_XEMACS (widget);
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
302 GtkFixed *fixed = GTK_FIXED (widget);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 struct frame *f = GTK_XEMACS_FRAME (x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304 int columns, rows;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
305 GList *children;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
306 guint16 border_width;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
308 widget->allocation = *allocation;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
309 if (GTK_WIDGET_REALIZED (widget))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
310 gdk_window_move_resize (widget->window,
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
311 allocation->x,
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
312 allocation->y,
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
313 allocation->width,
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
314 allocation->height);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
315
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
316 border_width = GTK_CONTAINER (fixed)->border_width;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
317
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
318 children = fixed->children;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
319 while (children)
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
320 {
2336
53d45fc43132 [xemacs-hg @ 2004-10-16 13:08:48 by malcolmp]
malcolmp
parents: 2286
diff changeset
321 GtkFixedChild* child = (GtkFixedChild*) children->data;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
322 children = children->next;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
323
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
324 /*
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
325 Scrollbars are the only widget that is managed by GTK. See
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
326 comments in gtk_create_scrollbar_instance().
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
327 */
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
328 if (GTK_WIDGET_VISIBLE (child->widget) &&
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
329 gtk_type_is_a(GTK_OBJECT_TYPE(child->widget), GTK_TYPE_SCROLLBAR))
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
330 {
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
331 GtkAllocation child_allocation;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
332 GtkRequisition child_requisition;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
333
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
334 gtk_widget_get_child_requisition (child->widget, &child_requisition);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
335 child_allocation.x = child->x + border_width;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
336 child_allocation.y = child->y + border_width;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
337 child_allocation.width = child_requisition.width;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
338 child_allocation.height = child_requisition.height;
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
339 gtk_widget_size_allocate (child->widget, &child_allocation);
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
340 }
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
341 }
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 if (f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 f->pixwidth = allocation->width;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 f->pixheight = allocation->height;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
348 pixel_to_frame_unit_size (f,
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 allocation->width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 allocation->height, &columns, &rows);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351
5043
d0c14ea98592 various frame-geometry fixes
Ben Wing <ben@xemacs.org>
parents: 4962
diff changeset
352 change_frame_size (f, columns, rows, 1);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
356 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
357 gtk_xemacs_paint (GtkWidget *widget, GdkRectangle *area)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
358 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 GtkXEmacs *x = GTK_XEMACS (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 struct frame *f = GTK_XEMACS_FRAME (x);
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
361
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
362 if (GTK_WIDGET_DRAWABLE (widget))
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
363 redisplay_redraw_exposed_area (f, area->x, area->y, area->width,
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
364 area->height);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368 gtk_xemacs_draw (GtkWidget *widget, GdkRectangle *area)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370 GtkFixed *fixed = GTK_FIXED (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 GtkFixedChild *child;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372 GdkRectangle child_area;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 GList *children;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
375 /* I need to manually iterate over the children instead of just
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376 chaining to parent_class->draw() because it calls
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
377 gtk_fixed_paint() directly, which clears the background window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378 which causes A LOT of flashing. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
380 if (GTK_WIDGET_DRAWABLE (widget))
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
381 {
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
382 gtk_xemacs_paint (widget, area);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
384 children = fixed->children;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
386 while (children)
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
387 {
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
388 child = (GtkFixedChild*) children->data;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
389 children = children->next;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
390 /* #### This is what causes the scrollbar flickering!
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
391 Evidently the scrollbars pretty much take care of drawing
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
392 themselves in most cases. Then we come along and tell them
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
393 to redraw again!
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
395 But if we just leave it out, then they do not get drawn
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
396 correctly the first time!
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
398 Scrollbar flickering has been greatly helped by the
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
399 optimizations in scrollbar-gtk.c /
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
400 gtk_update_scrollbar_instance_status (), so this is not that
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
401 big a deal anymore.
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
402 */
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
403 if (gtk_widget_intersect (child->widget, area, &child_area))
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
404 {
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
405 gtk_widget_draw (child->widget, &child_area);
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
406 }
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
407 }
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
408 }
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
409 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
410
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411 static gint
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 gtk_xemacs_expose (GtkWidget *widget, GdkEventExpose *event)
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 GtkXEmacs *x = GTK_XEMACS (widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 struct frame *f = GTK_XEMACS_FRAME (x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416 GdkRectangle *a = &event->area;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
418 if (GTK_WIDGET_DRAWABLE (widget))
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
419 {
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
420 /* This takes care of drawing the scrollbars, etc */
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
421 parent_class->expose_event (widget, event);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
423 /* Now draw the actual frame data */
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
424 if (!check_for_ignored_expose (f, a->x, a->y, a->width, a->height) &&
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
425 !find_matching_subwindow (f, a->x, a->y, a->width, a->height))
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
426 redisplay_redraw_exposed_area (f, a->x, a->y, a->width, a->height);
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
427 return (TRUE);
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
428 }
3087
dbd2a866e38a [xemacs-hg @ 2005-11-22 11:24:40 by malcolmp]
malcolmp
parents: 2336
diff changeset
429
dbd2a866e38a [xemacs-hg @ 2005-11-22 11:24:40 by malcolmp]
malcolmp
parents: 2336
diff changeset
430 return FALSE;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
431 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 Lisp_Object
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2195
diff changeset
434 xemacs_gtk_convert_color(GdkColor *c, GtkWidget *UNUSED (w))
462
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 char color_buf[255];
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
438 sprintf (color_buf, "#%04x%04x%04x", c->red, c->green, c->blue);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
439
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 4709
diff changeset
440 return (build_cistring (color_buf));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441 }