Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
XmRedisplayWidget(3)	    Library Functions Manual	    XmRedisplayWidget(3)

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 in-
     ternals to the application programmer by calling the expose method  of  the
     given  widget  with  a well formed Expose event and Region corresponding 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 completely  con-
     trol the sequence of rendering requests.

     XmRedisplayWidget	doesn't clear the widget window prior to calling the ex-
     pose 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(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=XmRedisplayWidget&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help