/* gcc `pkg-config --cflags --libs gtk+-2.0` -o big-combo big-combo.c */ #include #include #include #include static void sighandler (int sig) { gtk_main_quit (); } gboolean t_cb (gpointer data) { GtkWidget *widget = data; GdkDrawable* rootWindow = GDK_DRAWABLE(gtk_widget_get_root_window(widget)); GdkDisplay* display = gdk_drawable_get_display(rootWindow); Atom xproperty = gdk_x11_get_xatom_by_name_for_display (display, "_NET_WORKAREA"); Atom retType; int retFormat; long *workAreaPos = NULL; unsigned long retNItems; unsigned long retAfter; int xRes = XGetWindowProperty(GDK_DISPLAY_XDISPLAY (display), GDK_WINDOW_XWINDOW (rootWindow), xproperty, 0, 4, FALSE, XA_CARDINAL, &retType, &retFormat, &retNItems, &retAfter, (guchar**)&workAreaPos); g_assert(retType == XA_CARDINAL); g_printerr ("retFormat: %d, retNItems: %ld, retAfter: %ld, workAreaPos: %p\n", retFormat, retNItems, retAfter, workAreaPos); /*if (xRes != Success || workAreaPos == NULL || retType != XA_CARDINAL || 4 * sizeof(long) != length_returned || retFormat != 32) g_warning("Can not determine workarea"); else g_print("# %d [%d %d %d %d] lr:%d\n", 42,//*nworkAreaPos, workAreaPos[0], workAreaPos[1], workAreaPos[2], workAreaPos[3], length_returned);*/ if (workAreaPos) XFree(workAreaPos); return FALSE; } int main(int argc, char *argv[]) { GtkWidget *combo_box; GtkWidget *window; gint i; signal(SIGINT, sighandler); gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_show_all (window); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); g_timeout_add (100, t_cb, window); gtk_main (); return 0; combo_box = gtk_combo_box_new_text (); for (i = 0; i < 1000; i++) { gtk_combo_box_append_text (GTK_COMBO_BOX (combo_box), "Test"); /*GtkItem *item; item = gtk_menu_item_new_with_label(combo_box, "Hello"); gtk_menu_shell_append(GTK_MENU_SHELL(m_popup), item);*/ } window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_container_add (GTK_CONTAINER (window), combo_box); gtk_widget_show_all (window); gtk_main (); }