XmRedisplayWidget(library call) XmRedisplayWidget(library call)
NAME
XmRedisplayWidget -- Synchronously activates the expose method of a
widget to draw its content
SYNOPSIS
#include <Xm/Xm.h>
voidXmRedisplayWidget(
Widgetwidget);
DESCRIPTION
This function is a convenience routine that hides the details of the Xt
internals to the application programmer by calling the expose method of
the given widget with a well formed Expose event and Region correspond-
ing to the total area of the widget. If the widget doesn't have an
Expose method, the function does nothing.
This is primarily used in the context of X Printing if the programming
model chosen by the application is synchronous; that is, it doesn't
rely of X Print events for the driving of page layout but wants to com-
pletely control the sequence of rendering requests.
XmRedisplayWidget doesn't clear the widget window prior to calling the
expose method, since this is handled by calls to XpStartPage .
widget The widget to redisplay.
RETURN VALUE
None.
ERRORS/WARNINGS
Not applicable
EXAMPLES
In the following, a simple application wants to print the content of a
multi-page text widget (similar to dtpad).
PrintOKCallback(print_dialog...)
/*-------------*/
{
pshell = XmPrintSetup (print_dialog, pbs->print_screen,
"Print", NULL, 0);
XpStartJob(XtDisplay(pshell), XPSpool);
/**** here I realize the shell, get its size, create my widget
hierarchy: a bulletin board, and then a text widget,
that I stuff with the video text widget buffer */
/* get the total number of pages to print */
XtVaGetValues(ptext, XmNrows, &prows,
XmNtotalLines, n_lines, NULL);
n_pages = n_lines / prows;
/***** now print the pages in a loop */
for (cur_page=0; cur_page != n_pages; cur_page++) {
XpStartPage(XtDisplay(pshell), XtWindow(pshell), False);
XmRedisplayWidget(ptext); /* do the drawing */
XpEndPage(XtDisplay(pshell));
XmTextScroll(ptext, prows); /* get ready for next page */
}
/***** I'm done */
XpEndJob(XtDisplay(pshell));
}
Of course, one could change the above code to include it in a fork()
branch so that the main program is not blocked while printing is going
on. Another way to achieve a "print-in-the-background" effect is to use
an Xt workproc. Using the same sample application, that gives us:
Boolean
PrintOnePageWP(XtPointer npages) /* workproc */
/*-------------*/
{
static int cur_page = 0;
cur_page++;
XpStartPage(XtDisplay(pshell), XtWindow(pshell), False);
XmRedisplayWidget(ptext); /* do the drawing */
XpEndPage(XtDisplay(pshell));
XmTextScroll(ptext, prows); /* get ready for next page */
if (cur_page == n_pages) { /***** I'm done */
XpEndJob(XtDisplay(pshell));
XtDestroyWidget(pshell);
XtCloseDisplay(XtDisplay(pshell));
}
return (cur_page == n_pages);
}
PrintOKCallback(...)
/*-------------*/
{
pshell = XmPrintSetup (widget, pbs->print_screen,
"Print", NULL, 0);
XpStartJob(XtDisplay(pshell), XPSpool);
/**** here I get the size of the shell, create my widget
hierarchy: a bulletin board, and then a text widget,
that I stuff with the video text widget buffer */
/* get the total number of pages to print */
/* ... same code as above example */
/***** print the pages in the background */
XtAppAddWorkProc(app_context, PrintOnePageWP, n_pages);
}
SEE ALSO
XmPrintSetup(3), XmPrintShell(3)
XmRedisplayWidget(library call)
openMotif 2.3.1 - Generated Tue Dec 2 08:38:34 CST 2008
