annotate src/scrollbar-gtk.c @ 5276:dd2976af8783

Add some missing #includes, termcap.c, hopefully fixing Adam Sjoegren's build. 2010-09-18 Aidan Kehoe <kehoea@parhasard.net> * termcap.c: Add a couple of missing includes here, which should fix builds that use this file. (I have no access to such builds, but Mats' buildbot shows output that indicates they fail at link time since DEVICE_BAUD_RATE and IS_DIRECTORY_SEP are available.)
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 18 Sep 2010 15:03:54 +0100
parents 5ddbab03b0e6
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
1 /* scrollbar implementation -- GTK interface.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 Copyright (C) 1994, 1995 Board of Trustees, University of Illinois.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
3 Copyright (C) 1994 Amdhal Corporation.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4 Copyright (C) 1995 Sun Microsystems, Inc.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 Copyright (C) 1995 Darrell Kindred <dkindred+@cmu.edu>.
5169
6c6d78781d59 cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup
Ben Wing <ben@xemacs.org>
parents: 5157
diff changeset
6 Copyright (C) 2010 Ben Wing.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 XEmacs is free software; you can redistribute it and/or modify it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11 under the terms of the GNU General Public License as published by the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 Free Software Foundation; either version 2, or (at your option) any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 later version.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 XEmacs is distributed in the hope that it will be useful, but WITHOUT
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 for more details.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21 along with XEmacs; see the file COPYING. If not, write to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23 Boston, MA 02111-1307, USA. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25 /* Synched up with: Not in FSF. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26 /* Gtk version by William M. Perry */
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 <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29 #include "lisp.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
30
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
31 #include "frame-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
32 #include "window.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
33
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 793
diff changeset
34 #include "console-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
35 #include "glyphs-gtk.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
36 #include "scrollbar-gtk.h"
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
37
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
38 static gboolean scrollbar_cb (GtkAdjustment *adj, gpointer user_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
39
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40 /* Used to prevent changing the size of the slider while drag
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
41 scrolling, under Motif. This is necessary because the Motif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
42 scrollbar is incredibly stupid about updating the slider and causes
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43 lots of flicker if it is done too often. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 static int inhibit_slider_size_change;
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 int vertical_drag_in_progress;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
48
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
49 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
50 static int
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
51 gtk_inhibit_scrollbar_slider_size_change (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
52 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
53 return inhibit_slider_size_change;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
54 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
55
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
56 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
57 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
58 gtk_free_scrollbar_instance (struct scrollbar_instance *instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
59 {
3482
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
60 if (instance->scrollbar_data)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
61 {
3482
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
62 if (SCROLLBAR_GTK_WIDGET (instance))
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
63 {
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
64 gtk_widget_hide_all (SCROLLBAR_GTK_WIDGET (instance));
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
65 gtk_widget_destroy (SCROLLBAR_GTK_WIDGET (instance));
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
66 }
20773f9b7bc0 [xemacs-hg @ 2006-06-29 16:58:59 by james]
james
parents: 3024
diff changeset
67
4976
16112448d484 Rename xfree(FOO, TYPE) -> xfree(FOO)
Ben Wing <ben@xemacs.org>
parents: 3482
diff changeset
68 xfree (instance->scrollbar_data);
5169
6c6d78781d59 cleanup of code related to xfree(), better KKCC backtrace capabilities, document XD_INLINE_LISP_OBJECT_BLOCK_PTR, fix some memory leaks, other code cleanup
Ben Wing <ben@xemacs.org>
parents: 5157
diff changeset
69 instance->scrollbar_data = 0;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
70 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
71 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
72
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
73 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
74 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
75 gtk_release_scrollbar_instance (struct scrollbar_instance *instance)
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 /* It won't hurt to hide it all the time, will it? */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78 gtk_widget_hide_all (SCROLLBAR_GTK_WIDGET (instance));
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 gboolean
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2195
diff changeset
82 scrollbar_drag_hack_cb (GtkWidget *UNUSED (w), GdkEventButton *UNUSED (ev),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2195
diff changeset
83 gpointer v)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
84 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
85 vertical_drag_in_progress = (int) v;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
86 inhibit_slider_size_change = (int) v;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
87 return (FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
88 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
89
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 gtk_create_scrollbar_instance (struct frame *f, int vertical,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93 struct scrollbar_instance *instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 GtkAdjustment *adj = GTK_ADJUSTMENT (gtk_adjustment_new (0,0,0,0,0,0));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 GtkScrollbar *sb = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98 /* initialize the X specific data section. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 instance->scrollbar_data = xnew_and_zero (struct gtk_scrollbar_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 SCROLLBAR_GTK_ID (instance) = new_gui_id ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 SCROLLBAR_GTK_VDRAG_ORIG_VALUE (instance) = -1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 SCROLLBAR_GTK_LAST_VALUE (instance) = adj->value;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
105 gtk_object_set_data (GTK_OBJECT (adj), GTK_DATA_GUI_IDENTIFIER, (void *) SCROLLBAR_GTK_ID (instance));
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
106 gtk_object_set_data (GTK_OBJECT (adj), GTK_DATA_FRAME_IDENTIFIER, f);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108 sb = GTK_SCROLLBAR (vertical ? gtk_vscrollbar_new (adj) : gtk_hscrollbar_new (adj));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109 SCROLLBAR_GTK_WIDGET (instance) = GTK_WIDGET (sb);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 gtk_signal_connect (GTK_OBJECT (adj),"value-changed",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 GTK_SIGNAL_FUNC (scrollbar_cb), (gpointer) vertical);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114 gtk_signal_connect (GTK_OBJECT (sb), "button-press-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 GTK_SIGNAL_FUNC (scrollbar_drag_hack_cb), (gpointer) 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 gtk_signal_connect (GTK_OBJECT (sb), "button-release-event",
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 GTK_SIGNAL_FUNC (scrollbar_drag_hack_cb), (gpointer) 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 gtk_fixed_put (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)), SCROLLBAR_GTK_WIDGET (instance), 0, 0);
525
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
120
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
121 /*
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
122 ** With gtk version > 1.2.8 the scrollbars in gtk-xemacs and xemacs
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
123 ** from CVS are invisible. In fact they are not invisible but very
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
124 ** thin (0 pixels wide). This is so, because the new gtk code does
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
125 ** not call gtk_widget_request_size() on the newly created
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
126 ** scrollbars anymore. this change was done to allow the theme
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
127 ** engines to manipulate the scrollbar width. This patch calls
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
128 ** gtk_widget_request_size with the newly created scollbars. Maybe
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
129 ** it is better to postpone this call just before the
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
130 ** gtk_widget_show() call is done on the scrolbar.
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
131 */
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
132 gtk_widget_size_request(GTK_WIDGET(sb), &(GTK_WIDGET(sb)->requisition));
77fb0aa0e69f [xemacs-hg @ 2001-05-09 14:31:52 by wmperry]
wmperry
parents: 462
diff changeset
133
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 gtk_widget_hide (SCROLLBAR_GTK_WIDGET (instance));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
135 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
137 #define UPDATE_DATA_FIELD(field) \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 if (new_##field >= 0 && \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 SCROLLBAR_GTK_POS_DATA (inst).field != new_##field) { \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 SCROLLBAR_GTK_POS_DATA (inst).field = new_##field; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 inst->scrollbar_instance_changed = 1; \
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 /* #### The -1 check is such a hack. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 gtk_update_scrollbar_instance_values (struct window *w,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 struct scrollbar_instance *inst,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 int new_line_increment,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150 int new_page_increment,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 int new_minimum, int new_maximum,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152 int new_slider_size,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 int new_slider_position,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 int new_scrollbar_width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155 int new_scrollbar_height,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 int new_scrollbar_x, int new_scrollbar_y)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 UPDATE_DATA_FIELD (line_increment);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 UPDATE_DATA_FIELD (page_increment);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160 UPDATE_DATA_FIELD (minimum);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
161 UPDATE_DATA_FIELD (maximum);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162 UPDATE_DATA_FIELD (slider_size);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 UPDATE_DATA_FIELD (slider_position);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 UPDATE_DATA_FIELD (scrollbar_width);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 UPDATE_DATA_FIELD (scrollbar_height);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 UPDATE_DATA_FIELD (scrollbar_x);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167 UPDATE_DATA_FIELD (scrollbar_y);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 if (w && !vertical_drag_in_progress)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 int new_vov = SCROLLBAR_GTK_POS_DATA (inst).slider_position;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172 int new_vows = marker_position (w->start[CURRENT_DISP]);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 if (SCROLLBAR_GTK_VDRAG_ORIG_VALUE (inst) != new_vov)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 SCROLLBAR_GTK_VDRAG_ORIG_VALUE (inst) = new_vov;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 inst->scrollbar_instance_changed = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 if (SCROLLBAR_GTK_VDRAG_ORIG_WINDOW_START (inst) != new_vows)
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 SCROLLBAR_GTK_VDRAG_ORIG_WINDOW_START (inst) = new_vows;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 inst->scrollbar_instance_changed = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 }
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 /* Used by gtk_update_scrollbar_instance_status. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 update_one_widget_scrollbar_pointer (struct window *w, GtkWidget *wid)
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 if (!wid->window)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192 gtk_widget_realize (wid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194 if (POINTER_IMAGE_INSTANCEP (w->scrollbar_pointer))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
195 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 gdk_window_set_cursor (GET_GTK_WIDGET_WINDOW (wid),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 XIMAGE_INSTANCE_GTK_CURSOR (w->scrollbar_pointer));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198 gdk_flush ();
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 /* A device method. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
203 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
204 gtk_update_scrollbar_instance_status (struct window *w, int active, int size,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 struct scrollbar_instance *instance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 struct frame *f = XFRAME (w->frame);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 GtkWidget *wid = SCROLLBAR_GTK_WIDGET (instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209 gboolean managed = GTK_WIDGET_MAPPED (wid);
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 if (active && size)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
212 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 if (instance->scrollbar_instance_changed)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 /* Need to set the height, width, and position of the widget */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
216 GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (wid));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 scrollbar_values *pos_data = & SCROLLBAR_GTK_POS_DATA (instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218 int modified_p = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
219
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220 /* We do not want to update the size all the time if we can
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 help it. This cuts down on annoying flicker.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
223 if ((wid->allocation.width != pos_data->scrollbar_width) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
224 (wid->allocation.height != pos_data->scrollbar_height))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 gtk_widget_set_usize (wid,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227 pos_data->scrollbar_width,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228 pos_data->scrollbar_height);
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
229
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
230 /*
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
231 UGLY! UGLY! UGLY! Changes to wid->allocation are queued and
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
232 not performed until the GTK event loop. However, when the
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
233 fontlock progress bar is run, the vertical scrollbar's height
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
234 is change and then changed back before events are again
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
235 processed. This means that the change back is not seen and
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
236 the scrollbar is left too short. Fix this by making the
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
237 change manually so the test above sees the change. This does
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
238 not seem to cause problems in other cases.
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
239 */
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
240
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
241 wid->allocation.width = pos_data->scrollbar_width;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
242 wid->allocation.height = pos_data->scrollbar_height;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
243
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
244 modified_p = 1;
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 /* Ditto for the x/y position. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
248 if ((wid->allocation.x != pos_data->scrollbar_x) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
249 (wid->allocation.y != pos_data->scrollbar_y))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
250 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
251 gtk_fixed_move (GTK_FIXED (FRAME_GTK_TEXT_WIDGET (f)),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
252 wid,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
253 pos_data->scrollbar_x,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
254 pos_data->scrollbar_y);
2195
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
255
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
256 /*
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
257 UGLY! UGLY! UGLY! Changes to wid->allocation are queued and
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
258 not performed until the GTK event loop. However, when the
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
259 fontlock progress bar is run, the horizontal scrollbar's
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
260 position is change and then changed back before events are
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
261 again processed. This means that the change back is not seen
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
262 and the scrollbar is left in the wrong position. Fix this by
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
263 making the change manually so the test above sees the change.
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
264 This does not seem to cause problems in other cases.
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
265 */
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
266
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
267 wid->allocation.x = pos_data->scrollbar_x;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
268 wid->allocation.y = pos_data->scrollbar_y;
23d90a805259 [xemacs-hg @ 2004-07-31 12:03:05 by malcolmp]
malcolmp
parents: 2168
diff changeset
269
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
270 modified_p = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
271 }
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 adj->lower = pos_data->minimum;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
274 adj->upper = pos_data->maximum;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
275 adj->page_increment = pos_data->slider_size + 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
276 adj->step_increment = w->max_line_len - 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
277 adj->page_size = pos_data->slider_size + 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278 adj->value = pos_data->slider_position;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 /* But, if we didn't resize or move the scrollbar, the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 widget will not get redrawn correctly when the user
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282 scrolls around in the XEmacs frame manually. So we
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 update the slider manually here.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
285 if (!modified_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
286 gtk_range_slider_update (GTK_RANGE (wid));
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 instance->scrollbar_instance_changed = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
290
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
291 if (!managed)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
293 gtk_widget_show (wid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
294 update_one_widget_scrollbar_pointer (w, wid);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
295 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297 else if (managed)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 gtk_widget_hide (wid);
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 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 enum gtk_scrollbar_loop
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
305 GTK_FIND_SCROLLBAR_WINDOW_MIRROR,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
306 GTK_SET_SCROLLBAR_POINTER,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 GTK_WINDOW_IS_SCROLLBAR,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
308 GTK_UPDATE_FRAME_SCROLLBARS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
309 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
310
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 static struct window_mirror *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312 gtk_scrollbar_loop (enum gtk_scrollbar_loop type, Lisp_Object window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313 struct window_mirror *mir,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
314 GUI_ID id, GdkWindow *x_win)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316 struct window_mirror *retval = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
318 while (mir)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 struct scrollbar_instance *vinstance = mir->scrollbar_vertical_instance;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
321 struct scrollbar_instance *hinstance = mir->scrollbar_horizontal_instance;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
322 struct window *w = XWINDOW (window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
323
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324 if (mir->vchild)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
325 retval = gtk_scrollbar_loop (type, w->vchild, mir->vchild, id, x_win);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
326 else if (mir->hchild)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
327 retval = gtk_scrollbar_loop (type, w->hchild, mir->hchild, id, x_win);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 if (retval)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
329 return retval;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
331 if (hinstance || vinstance)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
333 switch (type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
334 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
335 case GTK_FIND_SCROLLBAR_WINDOW_MIRROR:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 if ((vinstance && SCROLLBAR_GTK_ID (vinstance) == id) ||
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
337 (hinstance && SCROLLBAR_GTK_ID (hinstance) == id))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
338 return mir;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
339 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
340 case GTK_UPDATE_FRAME_SCROLLBARS:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
341 if (!mir->vchild && !mir->hchild)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342 update_window_scrollbars (w, mir, 1, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 case GTK_SET_SCROLLBAR_POINTER:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 if (!mir->vchild && !mir->hchild)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347 GtkWidget *widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
348
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 widget = SCROLLBAR_GTK_WIDGET (hinstance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 if (widget && GTK_WIDGET_MAPPED (widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351 update_one_widget_scrollbar_pointer (w, widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353 widget = SCROLLBAR_GTK_WIDGET (vinstance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354 if (widget && GTK_WIDGET_MAPPED (widget))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 update_one_widget_scrollbar_pointer (w, widget);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
356 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
357 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
358 case GTK_WINDOW_IS_SCROLLBAR:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359 if (!mir->vchild && !mir->hchild)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
360 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361 GtkWidget *widget;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 widget = SCROLLBAR_GTK_WIDGET (hinstance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
364 if (widget && GTK_WIDGET_MAPPED (widget) &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 GET_GTK_WIDGET_WINDOW (widget) == x_win)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 return (struct window_mirror *) 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368 widget = SCROLLBAR_GTK_WIDGET (vinstance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 if (widget && GTK_WIDGET_MAPPED (widget) &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370 GET_GTK_WIDGET_WINDOW (widget) == x_win)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 return (struct window_mirror *) 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374 default:
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
375 ABORT ();
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
376 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
377 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379 mir = mir->next;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
380 window = w->next;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383 return NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
386 /* Used by callbacks. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
387 static struct window_mirror *
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388 find_scrollbar_window_mirror (struct frame *f, GUI_ID id)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
389 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 if (f->mirror_dirty)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
391 update_frame_window_mirror (f);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
392 return gtk_scrollbar_loop (GTK_FIND_SCROLLBAR_WINDOW_MIRROR, f->root_window,
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
393 XWINDOW_MIRROR (f->root_mirror), id,
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
394 (GdkWindow *) NULL);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
395 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
396
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 static gboolean
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 scrollbar_cb (GtkAdjustment *adj, gpointer user_data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
401 int vertical = (int) user_data;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
402 struct frame *f = (struct frame*) gtk_object_get_data (GTK_OBJECT (adj), GTK_DATA_FRAME_IDENTIFIER);
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
403 struct scrollbar_instance *instance;
2168
95fee4a1420e [xemacs-hg @ 2004-07-07 12:00:58 by malcolmp]
malcolmp
parents: 2054
diff changeset
404 GUI_ID id = (GUI_ID) gtk_object_get_data (GTK_OBJECT (adj), GTK_DATA_GUI_IDENTIFIER);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405 Lisp_Object win, frame;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406 struct window_mirror *mirror;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 Lisp_Object event_type = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
408 Lisp_Object event_data = Qnil;
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 if (!f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
411 return(FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 mirror = find_scrollbar_window_mirror (f, id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 if (!mirror)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 return(FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417 win = real_window (mirror, 1);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
418
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 if (NILP (win))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420 return(FALSE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
421 instance = vertical ? mirror->scrollbar_vertical_instance : mirror->scrollbar_horizontal_instance;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 frame = WINDOW_FRAME (XWINDOW (win));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
423
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
424 inhibit_slider_size_change = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425 switch (GTK_RANGE (SCROLLBAR_GTK_WIDGET (instance))->scroll_type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
426 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 case GTK_SCROLL_PAGE_BACKWARD:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428 event_type = vertical ? Qscrollbar_page_up : Qscrollbar_page_left;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 event_data = Fcons (win, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
431 case GTK_SCROLL_PAGE_FORWARD:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432 event_type = vertical ? Qscrollbar_page_down : Qscrollbar_page_right;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 event_data = Fcons (win, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435 case GTK_SCROLL_STEP_FORWARD:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
436 event_type = vertical ? Qscrollbar_line_down : Qscrollbar_char_right;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
437 event_data = win;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
438 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
439 case GTK_SCROLL_STEP_BACKWARD:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 event_type = vertical ? Qscrollbar_line_up : Qscrollbar_char_left;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441 event_data = win;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
442 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
443 case GTK_SCROLL_NONE:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 case GTK_SCROLL_JUMP:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 inhibit_slider_size_change = 1;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
446 event_type = vertical ? Qscrollbar_vertical_drag : Qscrollbar_horizontal_drag;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
447 event_data = Fcons (win, make_int ((int)adj->value));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448 break;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449 default:
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2286
diff changeset
450 ABORT();
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
453 signal_special_gtk_user_event (frame, event_type, event_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
454
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 return (TRUE);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
457
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
458 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 gtk_scrollbar_pointer_changed_in_window (struct window *w)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
460 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 617
diff changeset
461 Lisp_Object window = wrap_window (w);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
463 gtk_scrollbar_loop (GTK_SET_SCROLLBAR_POINTER, window,
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
464 find_window_mirror (w), 0, (GdkWindow *) NULL);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
466
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 /* #### BILL!!! This comment is not true for Gtk - should it be? */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468 /* Make sure that all scrollbars on frame are up-to-date. Called
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469 directly from gtk_set_frame_properties in frame-gtk.c*/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471 gtk_update_frame_scrollbars (struct frame *f)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472 {
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
473 gtk_scrollbar_loop (GTK_UPDATE_FRAME_SCROLLBARS, f->root_window,
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 608
diff changeset
474 XWINDOW_MIRROR (f->root_mirror),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 0, (GdkWindow *) NULL);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478 #ifdef MEMORY_USAGE_STATS
5170
5ddbab03b0e6 various fixes to memory-usage stats
Ben Wing <ben@xemacs.org>
parents: 5169
diff changeset
479 static Bytecount
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2195
diff changeset
480 gtk_compute_scrollbar_instance_usage (struct device *UNUSED (d),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
481 struct scrollbar_instance *inst,
5157
1fae11d56ad2 redo memory-usage mechanism, add way of dynamically initializing Lisp objects
Ben Wing <ben@xemacs.org>
parents: 4976
diff changeset
482 struct usage_stats *ustats)
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483 {
5170
5ddbab03b0e6 various fixes to memory-usage stats
Ben Wing <ben@xemacs.org>
parents: 5169
diff changeset
484 struct gtk_scrollbar_data *data =
5ddbab03b0e6 various fixes to memory-usage stats
Ben Wing <ben@xemacs.org>
parents: 5169
diff changeset
485 (struct gtk_scrollbar_data *) inst->scrollbar_data;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486
5170
5ddbab03b0e6 various fixes to memory-usage stats
Ben Wing <ben@xemacs.org>
parents: 5169
diff changeset
487 return malloced_storage_size (data, sizeof (*data), ustats);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
489
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
490 #endif /* MEMORY_USAGE_STATS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
492
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
493 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
494 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
495 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
496
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
497 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
498 console_type_create_scrollbar_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
499 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
500 CONSOLE_HAS_METHOD (gtk, inhibit_scrollbar_slider_size_change);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
501 CONSOLE_HAS_METHOD (gtk, free_scrollbar_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
502 CONSOLE_HAS_METHOD (gtk, release_scrollbar_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
503 CONSOLE_HAS_METHOD (gtk, create_scrollbar_instance);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
504 CONSOLE_HAS_METHOD (gtk, update_scrollbar_instance_values);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
505 CONSOLE_HAS_METHOD (gtk, update_scrollbar_instance_status);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
506 CONSOLE_HAS_METHOD (gtk, scrollbar_pointer_changed_in_window);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
507 #ifdef MEMORY_USAGE_STATS
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 CONSOLE_HAS_METHOD (gtk, compute_scrollbar_instance_usage);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 #endif /* MEMORY_USAGE_STATS */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513 vars_of_scrollbar_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
515 Fprovide (intern ("gtk-scrollbars"));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
516 }