---
name: "XmRedisplayWidget"
section: "3"
platform: "linux"
package: "openmotif"
version: "2.3.8-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XmRedisplayWidget"
---

# XmRedisplayWidget(3)

Synchronously activates the expose method of a widget to draw its content

## 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** 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 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)](/XmPrintSetup/3.md), [**XmPrintShell**(3)](/XmPrintShell/3.md)
