annotate src/gtk-xemacs.c @ 5043:d0c14ea98592

various frame-geometry fixes -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-02-15 Ben Wing <ben@xemacs.org> * EmacsFrame.c: * EmacsFrame.c (EmacsFrameResize): * console-msw-impl.h: * console-msw-impl.h (struct mswindows_frame): * console-msw-impl.h (FRAME_MSWINDOWS_TARGET_RECT): * device-tty.c: * device-tty.c (tty_asynch_device_change): * event-msw.c: * event-msw.c (mswindows_wnd_proc): * faces.c (Fface_list): * faces.h: * frame-gtk.c: * frame-gtk.c (gtk_set_initial_frame_size): * frame-gtk.c (gtk_set_frame_size): * frame-msw.c: * frame-msw.c (mswindows_init_frame_1): * frame-msw.c (mswindows_set_frame_size): * frame-msw.c (mswindows_size_frame_internal): * frame-msw.c (msprinter_init_frame_3): * frame.c: * frame.c (enum): * frame.c (Fmake_frame): * frame.c (adjust_frame_size): * frame.c (store_minibuf_frame_prop): * frame.c (Fframe_property): * frame.c (Fframe_properties): * frame.c (Fframe_displayable_pixel_height): * frame.c (Fframe_displayable_pixel_width): * frame.c (internal_set_frame_size): * frame.c (Fset_frame_height): * frame.c (Fset_frame_pixel_height): * frame.c (Fset_frame_displayable_pixel_height): * frame.c (Fset_frame_width): * frame.c (Fset_frame_pixel_width): * frame.c (Fset_frame_displayable_pixel_width): * frame.c (Fset_frame_size): * frame.c (Fset_frame_pixel_size): * frame.c (Fset_frame_displayable_pixel_size): * frame.c (frame_conversion_internal_1): * frame.c (get_frame_displayable_pixel_size): * frame.c (change_frame_size_1): * frame.c (change_frame_size): * frame.c (generate_title_string): * frame.h: * gtk-xemacs.c: * gtk-xemacs.c (gtk_xemacs_size_request): * gtk-xemacs.c (gtk_xemacs_size_allocate): * gtk-xemacs.c (gtk_xemacs_paint): * gutter.c: * gutter.c (update_gutter_geometry): * redisplay.c (end_hold_frame_size_changes): * redisplay.c (redisplay_frame): * toolbar.c: * toolbar.c (update_frame_toolbars_geometry): * window.c: * window.c (frame_pixsize_valid_p): * window.c (check_frame_size): Various fixes to frame geometry to make it a bit easier to understand and fix some bugs. 1. IMPORTANT: Some renamings. Will need to be applied carefully to the carbon repository, in the following order: -- pixel_to_char_size -> pixel_to_frame_unit_size -- char_to_pixel_size -> frame_unit_to_pixel_size -- pixel_to_real_char_size -> pixel_to_char_size -- char_to_real_pixel_size -> char_to_pixel_size -- Reverse second and third arguments of change_frame_size() and change_frame_size_1() to try to make functions consistent in putting width before height. -- Eliminate old round_size_to_char, because it didn't really do anything differently from round_size_to_real_char() -- round_size_to_real_char -> round_size_to_char; any places that called the old round_size_to_char should just call the new one. 2. IMPORTANT FOR CARBON: The set_frame_size() method is now passed sizes in "frame units", like all other frame-sizing functions, rather than some hacked-up combination of char-cell units and total pixel size. This only affects window systems that use "pixelated geometry", and I'm not sure if Carbon is one of them. MS Windows is pixelated, X and GTK are not. For pixelated-geometry systems, the size in set_frame_size() is in displayable pixels rather than total pixels and needs to be converted appropriately; take a look at the changes made to mswindows_set_frame_size() method if necessary. 3. Add a big long comment in frame.c describing how frame geometry works. 4. Remove MS Windows-specific character height and width fields, duplicative and unused. 5. frame-displayable-pixel-* and set-frame-displayable-pixel-* didn't use to work on MS Windows, but they do now. 6. In general, clean up the handling of "pixelated geometry" so that fewer functions have to worry about this. This is really an abomination that should be removed entirely but that will have to happen later. Fix some buggy code in frame_conversion_internal() that happened to "work" because it was countered by oppositely buggy code in change_frame_size(). 7. Clean up some frame-size code in toolbar.c and use functions already provided in frame.c instead of rolling its own. 8. Fix check_frame_size() in window.c, which formerly didn't take pixelated geometry into account.
author Ben Wing <ben@xemacs.org>
date Mon, 15 Feb 2010 22:14:11 -0600
parents e813cf16c015
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 }