Dear All, I am working on a project whose code was written in Xlib and now I need to develop a GUI for it. I want to use GTK so I wonder if I could embed the former xlib window into a GTK top-level window. I wrote a small test program as below but it doesn't work. Does anyone have any idea about how this is gonna work?
#include <string.h> #include <X11/Xlib.h> #include <X11/keysym.h> #include <gtk/gtk.h> #include <gdk/gdkx.h> #include <stdlib.h> #include <stdio.h> #include <sys/types.h> void destroy (GtkWidget *widget, gpointer *data) { gtk_main_quit (); } int main(int argc, char* argv[]) { Display* display = XOpenDisplay(NULL); int screen = DefaultScreen(display); int width = DisplayWidth(display, screen)/6; int height = DisplayHeight(display, screen)/6; GtkWidget *gtkWin; XEvent e; pid_t pid; Bool child = FALSE; int timer = 0; gtk_init (&argc, &argv); gtkWin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(gtkWin), "destroy",GTK_SIGNAL_FUNC(destroy),NULL); gtk_widget_realize(gtkWin); Window win = XCreateSimpleWindow(display, RootWindow(display, screen), 0, 0, width, height, 3, BlackPixel(display, screen), WhitePixel(display, screen)); XStoreName(display, win, "hello"); GC gc = XCreateGC(display, win, 0, NULL); XMapWindow(display, win); XSelectInput(display, win, ExposureMask|ButtonPressMask); if((pid = fork()) <0 ) { perror("fork"); exit(1); } else if(pid > 0) { printf("parent\n"); XReparentWindow(display,win,GDK_WINDOW_XID(gtkWin->window), 50,50); XMapWindow(display,GDK_WINDOW_XID(gtkWin->window)); gtk_widget_show(gtkWin); gtk_main(); } else { printf("child\n"); while(1) { XNextEvent(display, &e); if(e.type==Expose && e.xexpose.count<1) { XDrawString(display, win, gc, 10, 10, "Hello World!", 12); } else if(e.type==ButtonPress) { XCloseDisplay(display); break; } else { } } } return 0; } Thanks & Regards, Kay _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list