Hi all,

The following application starts up a ???Run Application" dialog. If I use
X11 api, the application works fine. But if I use gdk api, the dialog
can not be started. Does anyone know if there is something wrong with
the code? Thanks in advance.

BTW:
You can run 'cc [source] -g `pkg-config --cflags --libs gdk-2.0`' to
build the source.
Jedy
----------------------------------------------------------------->8
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <gdk/gdk.h>
#include <gdk/gdkx.h>

int main(int argc, char* argv[])
{
        Atom gnome_panel_atom, run_atom;

        gdk_init(&argc, &argv);
        gnome_panel_atom = gdk_x11_get_xatom_by_name("_GNOME_PANEL_ACTION");
        run_atom = gdk_x11_get_xatom_by_name("_GNOME_PANEL_ACTION_RUN_DIALOG");

        if (gnome_panel_atom != None && run_atom != None) {
#if 0
                Display *display;
                XClientMessageEvent event;

                display = XOpenDisplay(NULL);
                if (display == NULL)
                        return 0;
                event.type = ClientMessage;
                event.window = DefaultRootWindow(display);
                event.message_type = gnome_panel_atom;
                event.format = 32;
                event.data.l[0] = run_atom;
                event.data.l[1] = (Time)(time(NULL) * 1000);

                XSendEvent(display, event.window, False, StructureNotifyMask,
                                (XEvent *)&event);
                XCloseDisplay(display);
#else
                gint ret;
                GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT); 
                ((GdkEventAny *)event)->window = gdk_get_default_root_window();
                ((GdkEventAny *)event)->send_event = TRUE; 
                ((GdkEventClient *)event)->message_type = 
                        gdk_x11_xatom_to_atom (gnome_panel_atom); 
                ((GdkEventClient *)event)->data_format = 32; 
                ((GdkEventClient *)event)->data.l[0] = run_atom;
                ((GdkEventClient *)event)->data.l[1] = (Time)(time(NULL) * 
1000);

                ret = gdk_event_send_client_message (event, 
                                GDK_WINDOW_XID 
(gdk_get_default_root_window())); 
                fprintf(stderr, "%d\n", ret);
                gdk_event_free (event);
#endif
        }

        return 0;
}



Reply via email to