Xorg problem: What happened to XRaiseWindow?
Ernest L. Williams Jr.
ernesto at ornl.gov
Fri Jan 20 04:14:39 PST 2006
On Fri, 2006-01-20 at 07:08 -0500, Ernest L. Williams Jr. wrote:
> Hi,
>
> When calling XRaiseWindow under Fedora, it does come to foreground when
> covered by another window, hmmm?
I meant to say: Does "NOT" come to the foreground.
> This used to work especially in RHEL
> 3. However, it does not work in FC5T2 or RHEL 4.
>
> Please any ideas on this one?
>
>
> I will show the simple code that reproduces the behaviour:
> ================ 1.c ======================================
> /* ---------------------------------------------
> *
> * This application creates a main window and raises it
> * approximately every 3 seconds. The only menu option
> * is "exit".
> *
> */
>
> #include <stdio.h>
> #include <stdlib.h>
> #include <fcntl.h>
> #include <math.h>
> #include <sys/types.h>
> #include <sys/time.h>
> #include <time.h>
> #include <wait.h>
> #include <signal.h>
> #include <unistd.h>
> #include <errno.h>
> #include <limits.h>
>
> #include <X11/Xlib.h>
> #include <X11/Intrinsic.h>
> #include <Xm/Xm.h>
> #include <Xm/AtomMgr.h>
> #include <Xm/Protocols.h>
> #include <Xm/MainW.h>
> #include <Xm/PushB.h>
> #include <Xm/CascadeB.h>
> #include <Xm/RowColumn.h>
>
> static int g_exit = 0;
>
> void exit_cb (
> Widget w,
> XtPointer client,
> XtPointer call )
> {
>
> int *flag = (int *) client;
>
> printf( "exit_cb callback function was invoked\n" );
>
> *flag = 1;
>
> }
>
> int main (
> int argc,
> char **argv
> ) {
>
> XtAppContext app;
> Display *display;
> Widget appTop, mainWin, menuBar, filePullDown, fileCascade, exitB;
> XmString menuStr, str;
> XEvent Xev;
> int result, isXEvent, n, count;
> struct timespec req, rem;
> Atom wm_delete_window;
>
> XtToolkitInitialize();
> app = XtCreateApplicationContext();
>
> display = XtOpenDisplay( app, NULL, NULL, "test", NULL, 0, &argc,
> argv );
>
> appTop = XtVaAppCreateShell( NULL, "test",
> applicationShellWidgetClass,
> display,
> XmNiconic, False,
> XmNmappedWhenManaged, True,
> NULL );
>
> mainWin = XtVaCreateManagedWidget( "main", xmMainWindowWidgetClass,
> appTop,
> XmNscrollBarDisplayPolicy, XmAS_NEEDED,
> XmNscrollingPolicy, XmAUTOMATIC,
> NULL );
>
> menuBar = XmCreateMenuBar( mainWin, "menubar", NULL, 0 );
>
> filePullDown = XmCreatePulldownMenu( menuBar, "file", NULL, 0 );
>
> menuStr = XmStringCreateLocalized( "file" );
> fileCascade = XtVaCreateManagedWidget( "filemenu",
> xmCascadeButtonWidgetClass,
> menuBar,
> XmNlabelString, menuStr,
> XmNmnemonic, 'f',
> XmNsubMenuId, filePullDown,
> NULL );
> XmStringFree( menuStr );
>
> str = XmStringCreateLocalized( "exit" );
> exitB = XtVaCreateManagedWidget( "pb", xmPushButtonWidgetClass,
> filePullDown,
> XmNlabelString, str,
> NULL );
> XmStringFree( str );
> XtAddCallback( exitB, XmNactivateCallback, exit_cb,
> (XtPointer) &g_exit );
>
> XtManageChild( menuBar );
>
> XtRealizeWidget( appTop );
>
> wm_delete_window = XmInternAtom( display, "WM_DELETE_WINDOW", False );
> XmAddWMProtocolCallback( appTop, wm_delete_window,
> exit_cb, (XtPointer) &g_exit );
> XtVaSetValues( appTop, XmNdeleteResponse, XmDO_NOTHING, NULL );
>
> //-------------------------------------------
>
> n = 0;
>
> while ( !g_exit ) {
>
> count = 1000;
>
> do {
> result = XtAppPending( app );
> if ( result ) {
> isXEvent = XtAppPeekEvent( app, &Xev );
> if ( isXEvent ) {
> if ( Xev.type != Expose ) {
> XtAppProcessEvent( app, result );
> }
> else {
> XtAppProcessEvent( app, result );
> }
> }
> else { // process all timer or alternate events
> XtAppProcessEvent( app, result );
> }
> }
> count--;
> } while ( result && count );
>
> req.tv_sec = 0;
> req.tv_nsec = 100000000;
> nanosleep( &req, &rem );
>
> // raise window approx every 3 seconds
> n++;
> if ( n == 30 ) {
> n = 0;
> printf( "call XRaiseWindow\n" );
> XRaiseWindow( display, XtWindow(appTop) );
> }
>
> }
>
> return 0;
>
> }
> ==========================================================
>
>
> ============ makefile ====================================
> CFLAGS = -Wall -O0 -g
> LDFLAGS = -g
>
> all : 1
>
> 1 : 1.o
> g++ $(LDFLAGS) -o 1 \
> -L/usr/X11R6/lib \
> -lXm -lXt -lX11 \
> 1.o
>
> 1.o : 1.c
> cc $(CFLAGS) -o 1.o -c 1.c
> ==========================================================
>
> Thanks,
> Ernest L. Williams Jr.
>
More information about the xorg
mailing list