name. The procedures run without-interrupts (or at least
without-preemption, or perhaps just without-toolkit).
Connecting a second callback disconnects the
-first. All connected callbacks are ``pinned'' by the
+first.
+
+@anchor{pinned-objects}
+All connected callbacks are ``pinned'' by the
@code{registered-callbacks} vector; they cannot be GCed until they are
explicitly de-registered. The callback @emph{and} its closure are
pinned. If the closure references the instance, the instance is
@end deffn
@deffn Procedure gobject-live? gobject
-#t while @var{gobject} is alive, #f after it has been killed.
+@code{#t} while @var{gobject} is alive, @code{#f} after it has been killed.
@end deffn
@anchor{gobject-unref!}
@end example
Note that @var{delete-callback} should reference @var{window} via
-parameter @emph{only} (per discussion above).
+parameter @emph{only}. See @bref{pinned-objects}.
@end deffn
@deffn Procedure g-signal-disconnect gobject name
@end deffn
@deffn Procedure pixbuf-loader-size-hook loader
-#f or the procedure that will be applied to the pixbuf size (two
+@code{#f} or the procedure that will be applied to the pixbuf size (two
integers, width and height).
@end deffn
@end deffn
@deffn Procedure pixbuf-loader-pixbuf-hook loader
-#f or the procedure that will be applied to the pixbuf as soon as it
+@code{#f} or the procedure that will be applied to the pixbuf as soon as it
is allocated.
@end deffn
@end deffn
@deffn Procedure pixbuf-loader-update-hook loader
-#f or the procedure that will be applied to areas of the pixbuf
+@code{#f} or the procedure that will be applied to areas of the pixbuf
recently updated.
@end deffn
@end deffn
@deffn Procedure pixbuf-loader-close-hook loader
-#f or the thunk that will be invoked when loading is complete.
+@code{#f} or the thunk that will be invoked when loading is complete.
@end deffn
@deffn Procedure set-pixbuf-loader-close-hook! loader thunk
@end deffn
@deffn Procedure pixbuf-loader-pixbuf loader
-#f or the pixbuf that is loading (or was loaded).
+@code{#f} or the pixbuf that is loading (or was loaded).
@end deffn
@deffn Procedure pixbuf-loader-error-message loader
-#f or a string describing any error encountered during the loading.
+@code{#f} or a string describing any error encountered during the loading.
@end deffn
@node Pango Layout, Cairo Context, Pixbuf Loader, API Reference
@end deffn
@deffn Procedure gtk-widget-destroyed? widget
-#f if @var{widget} has not been destroyed.
+@code{#f} if @var{widget} has not been destroyed.
@end deffn
@deffn Procedure gtk-widget-destroy widget
@end deffn
@deffn {Generic Procedure} gtk-widget-parent widget
-The parent gtk-container, or #f.
+The parent gtk-container, or @code{#f}.
@end deffn
@subsection Gtk Widget Callbacks
@deffn Procedure set-gtk-widget-draw-callback! widget callback
Arranges for @var{callback} to be applied to @var{widget} and a cairo
context clipped to the area to be re-drawn.
+@var{Callback} should return @code{#t} or @code{#f} to indicate
+whether the @code{"draw"} signal has been handled(?), else a warning
+is issued.
@end deffn
@deffn Procedure set-gtk-widget-event-callback! widget callback
Arrange for @var{callback} to be applied to @var{widget} and an alien
-GdkEvent whenever the widget receives an event. Do @emph{not} capture
-@var{widget} in @var{callback}'s closure, else it cannot be GCed.
+GdkEvent whenever the widget receives an @code{"event"} signal.
+@var{Callback} should return @code{#t} to stop emission of more
+specific signals like @code{"focus-in-event"} and @code{"focus"}. It
+must return either @code{#t} or @code{#f} else a warning is issued.
+Do @emph{not} capture @var{widget} in @var{callback}'s closure, else
+it cannot be GCed.
@end deffn
@subsection Gtk Widget Operators
@deffn Procedure gtk-widget-realized? widget
-#t if @var{widget} has been realized.
+@code{#t} if @var{widget} has been realized.
@end deffn
@deffn Procedure gtk-widget-drawable? widget
-#t if @var{widget} can be drawn, i.e. it is mapped and visible.
+@code{#t} if @var{widget} can be drawn, i.e. it is mapped and visible.
@end deffn
@deffn Procedure gtk-widget-grab-focus widget
@end deffn
@deffn Procedure gtk-widget-has-focus? widget
-#t if @var{widget} has the keyboard.
+@code{#t} if @var{widget} has the keyboard.
@end deffn
@anchor{gtk-widget-is-composited?}
@deffn Procedure gtk-widget-is-composited? widget
-#t if @var{widget} has an alpha channel.
+@code{#t} if @var{widget} has an alpha channel.
@end deffn
@deffn Procedure gtk-widget-show widget
@anchor{gtk-window-set-geometry-hints}
@deffn Procedure gtk-window-set-geometry-hints window widget . hints
-Sets @var{window}'s geometry hints. @var{Widget} can be #f or any
+Sets @var{window}'s geometry hints. @var{Widget} can be @code{#f} or any
widget that is ``showing'' in @var{window} (not just @var{window}'s
immediate child). When specified, the geometry hints are applied to
@var{widget}'s size, sizing @var{window} to account for decorations,
@end deffn
@deffn Procedure gtk-window-parse-geometry window string
-Returns #f if @var{string} is not a standard X geometry string.
-Otherwise returns #t and sets @var{window}'s user-requested size
+Returns @code{#f} if @var{string} is not a standard X geometry string.
+Otherwise returns @code{#t} and sets @var{window}'s user-requested size
and/or position. An X geometry string is something like
@code{"-0+0"}, meaning ``upper right hand corner''. The X manpage
contains the full details. Note that for this procedure to work
@end deffn
@deffn Procedure gtk-check-button-get-active button
-#t if @var{button} is ``on'', #f if it is ``off''.
+@code{#t} if @var{button} is ``on'', @code{#f} if it is ``off''.
@end deffn
@deffn Procedure gtk-check-button-set-active button active?
A direct subclass of gtk-widget representing a reference to a ScmWidget.
@end deffn
+@deffn Procedure guarantee-scm-widget object operator
+Type guarantor.
+@end deffn
+
@deffn Procedure set-scm-widget-set-scroll-adjustments-callback! widget callback
Arranges for @var{callback} to be applied to @var{widget} and the
horizontal and vertical GtkAdjustments (aliens). These need to be
specialized methods will draw. It allocates, moves and resizes the
GdkWindow, and dispatches events received on it.
+@anchor{event-handler-note} Note that the event handlers are run by
+the generic @code{"event"} signal, and can return @code{#t} to stop
+emission of more specific signals like @code{"focus-in-event"} and
+@code{"focus"}. They must return either @code{#t} or @code{#f} else a
+warning is issued.
+
@deffn Class <fix-widget>
A direct subclass of scm-widget. A ScmWidget toolkit object.
@end deffn
@deffn Procedure set-fix-widget-map-handler! widget handler
Arranges to apply @var{handler} to @var{widget} when it is mapped.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-unmap-handler! widget handler
Arranges to apply @var{handler} to @var{widget} when it is unmapped.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-enter-notify-handler! widget handler
Arranges to apply @var{handler} to @var{widget} when the pointer
enters.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-leave-notify-handler! widget handler
Arranges to apply @var{handler} to @var{widget} when the pointer
leaves.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-focus-change-handler! widget handler
Arranges to apply @var{handler} to @var{widget} and a boolean value
-when it receives a focus change event. The boolean is #t if
+when it receives a focus change event. The boolean is @code{#t} if
@var{widget} is now in focus.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-visibility-notify-handler! widget handler
Arranges to apply @var{handler} to @var{widget} and a symbol: one of
@code{visible}, @code{partially-obscured} or @code{obscured}.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-key-press-handler! widget handler
and a bitmap of char-bits. See @bref{gdk-keyval->name} and
@bref{gdk-key-state->char-bits} for the range of the last two
arguments.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@anchor{set-fix-widget-motion-handler!}
@code{hyper},
@code{meta} and
@code{release}.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@deffn Procedure set-fix-widget-button-handler! widget type handler
@var{type}, the button number (a fixnum), the modifiers, and the
coordinates of the pointer. See
@bref{set-fix-widget-motion-handler!}.
+@var{handler} must return @code{#t} or @code{#f}.
+See @bref{event-handler-note}.
@end deffn
@section Fix Resizer
@end deffn
@deffn {Generic Procedure} fix-layout-drawing layout
-The fix-drawing displayed in @var{layout}, or #f.
+The fix-drawing displayed in @var{layout}, or @code{#f}.
@end deffn
@anchor{set-fix-layout-drawing!}
@deffn Procedure fix-drawing-add-ink! drawing ink #!optional where
Adds @var{ink} to the top of the display list for @var{drawing}. If
-@var{where} is specified, it should be the symbol @var{top} (or #f),
+@var{where} is specified, it should be the symbol @var{top} (or @code{#f}),
the symbol @var{bottom}, or an ink already in the display list. When
@var{where} is an ink, @var{ink} is spliced in just under (before) it.
@end deffn
@end deffn
@deffn {Generic Procedure} fix-ink-drawing ink
-@var{Ink}'s fix-drawing, or #f.
+@var{Ink}'s fix-drawing, or @code{#f}.
@end deffn
@deffn Procedure fix-ink-widgets ink
-The widgets in which @var{ink} should be drawn, #t if it is drawn in
+The widgets in which @var{ink} should be drawn, @code{#t} if it is drawn in
all views.
@end deffn
@deffn Procedure set-fix-ink-widgets! ink widgets
-Draw @var{ink} only in the @var{widgets}. If @var{widgets} is #t,
+Draw @var{ink} only in the @var{widgets}. If @var{widgets} is @code{#t},
@var{ink} will appear in all views of the drawing.
@end deffn
@anchor{set-rectangle-ink-fill-color!}
@deffn Procedure set-rectangle-ink-fill-color! rectangle color
-Sets @var{rectangle}'s fill color. If @var{color} is #f,
+Sets @var{rectangle}'s fill color. If @var{color} is @code{#f},
@var{rectangle} is outlined, not filled.
@end deffn
@anchor{set-arc-ink-fill-color!}
@deffn Procedure set-arc-ink-fill-color! arc color
-Sets @var{arc}'s fill color. If @var{color} is #f, @var{arc} is not
+Sets @var{arc}'s fill color. If @var{color} is @code{#f}, @var{arc} is not
filled.
@end deffn
@deffn Procedure text-ink-xy-to-index text x y
If (@var{x}, @var{y}) is in @var{text}'s extent, return the index of
-the character at that point, else #f.
+the character at that point, else @code{#f}.
@end deffn
@deffn Procedure with-text-ink-grapheme-rect text index receiver
Applies @var{receiver} to the position and size (four fixnums) of the
@var{index}th character in @var{text}'s text. If @var{text} has no
-text, this procedure just returns #f; it does not apply
+text, this procedure just returns @code{#f}; it does not apply
@var{receiver}. It normally returns @var{receiver}'s return value.
@end deffn
@end deffn
@deffn Procedure simple-text-ink-font text
-#f or a PangoFontDescription alien.
+@code{#f} or a PangoFontDescription alien.
@end deffn
@deffn Procedure set-simple-text-ink-font! text font
@deffn Procedure gdk-window-process-updates window children-too?
Force expose events to be delivered immediately and synchronously to
@var{window}. This is occasionally useful, e.g. to produce nicer
-scrolling behavior. @var{Children-too?} should be #f to avoid
+scrolling behavior. @var{Children-too?} should be @code{#f} to avoid
sending expose events to child windows.
@end deffn
@end deffn
@deffn Procedure gtk-time-slice-window?
-#t if the time slice window is open, else #f.
+@code{#t} if the time slice window is open, else @code{#f}.
@end deffn
@deffn Procedure gtk-time-slice-window! open?
-If @var{open?} is #f, the time slice window is closed, else it is opened.
+If @var{open?} is @code{#f}, the time slice window is closed, else it is opened.
@end deffn
@deffn Procedure gtk-select-trace?
-#t if Scheme's GSource is being traced, else #f.
+@code{#t} if Scheme's GSource is being traced, else @code{#f}.
@end deffn
@deffn Procedure gtk-select-trace! trace?
-If @var{trace?} is #t, turns on tracing of Scheme's GSource.
+If @var{trace?} is @code{#t}, turns on tracing of Scheme's GSource.
@end deffn
@node Installation, Implementation Notes, API Reference, Top
(%trace2 " "(C-enum "GdkEventType" type)"\n")
(let ((handler (vector-ref (fix-widget-event-handlers widget) type)))
(if handler
- (if (handler widget GdkEvent) 1 0)
- ;; Unhandled
- 0))))
+ (handler widget GdkEvent)
+ #f))))
(define (set-fix-widget-map-handler! widget handler)
(guarantee-fix-widget widget 'set-fix-widget-map-handler!)
(fix:clip-region
cr (lambda (x y w h)
(if drawing
- (begin
+ (let ((area (make-fix-rect (fix:+ x offx) (fix:+ y offy) w h)))
(%trace2 ";draw area "x","y" "w"x"h" of "layout".\n")
- (drawing-expose drawing layout window cr
- (make-fix-rect (fix:+ x offx) (fix:+ y offy)
- w h)))
+ ;; AREA is in drawing coords.
+ (for-each
+ (lambda (ink)
+ (if (fix-ink-in? ink layout area)
+ (begin
+ (C-call "cairo_save" cr)
+ (fix-ink-draw-callback ink layout
+ window cr area)
+ (C-call "cairo_restore" cr))))
+ (fix-drawing-display-list drawing)))
(%trace2 ";draw area "x","y" "w"x"h
- " of "layout" (no drawing!).\n"))))
- 1))) ;; handled
+ " of "layout" (no drawing!).\n"))
+ #t)))))
(define (set-fix-layout-scroll-size! widget width height)
;; Tells WIDGET to adjust its scrollable extent. Notifies any
(connect-adjustment (fix-layout-vadjustment widget) vGtkAdjustment
widget set-fix-layout-vadjustment!)
(if (fix-widget-realized? widget)
- (adjust-adjustments widget))
- 0 ;; What does this mean?
- )
+ (adjust-adjustments widget)))
(define (connect-adjustment old-adjustment new-alien widget setter)
;; Disconnects OLD-ADJUSTMENT (if any) and applies SETTER to WIDGET
(C-call "gtk_cairo_transform_to_window" cr (gobject-alien resizer)
(fix-widget-window resizer))
(C-call "gtk_render_handle" style cr
- (->flonum (fix-rect-x geom))
- (->flonum (fix-rect-y geom))
+ 0. 0.
(->flonum (fix-rect-width geom))
(->flonum (fix-rect-height geom)))
- 1)) ;; handled
+ #t))
(define (resizer-enter-handler resizer)
(%trace ";resizer-enter-handler\n")
(if (and (fix-resizer-before resizer)
(fix-resizer-after resizer))
(C-call "gtk_widget_set_state_flags"
- (gobject-alien resizer) (C-enum "GTK_STATE_FLAG_PRELIGHT") 0)))
+ (gobject-alien resizer) (C-enum "GTK_STATE_FLAG_PRELIGHT") 0))
+ #t)
(define (resizer-leave-handler resizer)
(%trace ";resizer-leave-handler\n")
(if (not (fix-resizer-dragging? resizer))
(C-call "gtk_widget_unset_state_flags"
- (gobject-alien resizer) (C-enum "GTK_STATE_FLAG_PRELIGHT"))))
+ (gobject-alien resizer) (C-enum "GTK_STATE_FLAG_PRELIGHT")))
+ #t)
(define (resizer-press-handler resizer type button modifiers x y)
-;;; (declare (ignore type)) ;; 'press
(%trace ";resizer-press-handler "type" "button" "modifiers" "x","y"\n")
(let ((before (fix-resizer-before resizer))
(after (fix-resizer-after resizer)))
- (if (and before after (eq? button 1))
- (begin
- (%trace "; drag start\n")
- (set-fix-resizer-dragging?! resizer #t)
- (C-call "gtk_grab_add" (gobject-alien resizer))))))
+ (and before after (eq? button 1)
+ (begin
+ (%trace "; drag start\n")
+ (set-fix-resizer-dragging?! resizer #t)
+ (C-call "gtk_grab_add" (gobject-alien resizer))
+ #t))))
(define (resizer-release-handler resizer type button modifiers x y)
-;;; (declare (ignore type)) ;; 'release
(%trace ";resizer-release-handler "type" "button" "modifiers" "x","y"\n")
- (if (fix-resizer-dragging? resizer)
- (begin
- (%trace "; drag end!\n")
- (set-fix-resizer-dragging?! resizer #f)
- (C-call "gtk_grab_remove" (gobject-alien resizer)))))
+ (and (fix-resizer-dragging? resizer)
+ (begin
+ (%trace "; drag end!\n")
+ (set-fix-resizer-dragging?! resizer #f)
+ (C-call "gtk_grab_remove" (gobject-alien resizer))
+ #t)))
(define (resizer-motion-handler resizer modifiers x y)
(%trace ";resizer-motion-handler "resizer" "modifiers" "x" "y"\n")
(C-call "gtk_widget_queue_resize_no_redraw"
(gobject-alien before))
(C-call "gtk_widget_queue_resize_no_redraw"
- (gobject-alien after))))))
+ (gobject-alien after))))
+ #t))
(if (fix-resizer-stack-vertical? resizer)
(begin
(%trace "; drag dropped!\n")
(C-call "gtk_grab_remove" (gobject-alien resizer))
- (set-fix-resizer-dragging?! resizer #f)))))
+ (set-fix-resizer-dragging?! resizer #f)
+ #f))
+ #f))
\f
(define-class (<fix-drawing> (constructor () no-init))
()
(and (fix-ink-in-widget? ink widget)
(point-in-fix-rect? x y (fix-ink-extent ink))))))
-(define (drawing-expose drawing widget window cr area)
- ;; AREA is in drawing coords.
- (if (fix-rect-nominal? area)
- (for-each
- (lambda (ink)
- (if (fix-ink-in? ink widget area)
- (begin
- (C-call "cairo_save" cr)
- (fix-ink-draw-callback ink widget window cr area)
- (C-call "cairo_restore" cr))))
- (fix-drawing-display-list drawing))))
-
(define (fix-ink-in? ink widget area)
(declare (integrate-operator fix-ink-in?))
(and (fix-ink-in-widget? ink widget)
(memq widget widgets))))
(define-generic fix-ink-draw-callback (ink widget window cr exposed-area)
- ;; Due to the checks in drawing-expose, methods of this generic can
+ ;; Due to the checks in layout-draw-callback, methods of this generic can
;; assume expose-area and the ink's extent are intersecting, and INK
;; is visible in the WIDGET. Methods may also assume the widget is
;; realized and its window's cairo's clipping is already set. The