]> Pileus Git - ~andy/gtk/commitdiff
Make it work, even if the window is already realized or mapped.
authorOwen Taylor <otaylor@redhat.com>
Tue, 30 Apr 2002 23:44:14 +0000 (23:44 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Tue, 30 Apr 2002 23:44:14 +0000 (23:44 +0000)
Tue Apr 30 18:42:25 2002  Owen Taylor  <otaylor@redhat.com>

        * gtk/gtkwindow.c (gtk_window_set_screen): Make it
        work, even if the window is already realized or
        mapped.

        * tests/testgtk.c: Erwann's multihead changes, slightly
        dumbed down. (Removed logic for pulling windows onto
        the current screen, people can click twice on the demo
        to destroy and create again.)

        * tests/prop-editor.c: Set the screen on the property
        editor if the edited object is a widget.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gtk/gtkwindow.c
tests/prop-editor.c
tests/prop-editor.h
tests/testgtk.c

index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index a600cb000f17f9992fe2e373eeda54351377b5a8..b51f71b15a2a850ee1239a1c5383857a22937abf 100644 (file)
@@ -56,7 +56,6 @@ Tue Apr 30 14:15:14 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfilesel.c gtk/gtkselection.c: Doc fixes.
 
->>>>>>> 1.3389
 2002-04-30  Erwann Chenede - <erwann.chenede@sun.com>
 
         * gdk/x11/gdkimage-x11.c : rationalized multihead code
index e61211c2378b41eb2fb8891408aedcc1c5bc65a2..88006793a6e2072c90e6acf64ed3b929581b6524 100644 (file)
@@ -5386,26 +5386,41 @@ gtk_window_begin_move_drag  (GtkWindow *window,
  * @window: a #GtkWindow.
  * @screen: a #GtkScreen.
  *
- * Sets the #GdkScreen where the @window will be displayed.
- * This function has to be called before the @window
- * object is realized otherwise it will fail.
+ * Sets the #GdkScreen where the @window is displayed; if
+ * the window is already mapped, it will be unmapped, and
+ * then remapped on the new screen.
  */
 void
 gtk_window_set_screen (GtkWindow *window,
                       GdkScreen *screen)
 {
+  GtkWidget *widget;
+  gboolean was_mapped;
+  
   g_return_if_fail (GTK_IS_WINDOW (window));
   g_return_if_fail (GDK_IS_SCREEN (screen));
 
-  if (GTK_WIDGET_REALIZED (window))
-    {
-      g_warning ("Trying to change the window's screen while widget is visible");
-      return;
-    }
+  if (screen == window->screen)
+    return;
+
+  widget = GTK_WIDGET (window);
+  
+  was_mapped = GTK_WIDGET_MAPPED (widget);
+
+  if (was_mapped)
+    gtk_widget_unmap (widget);
+  if (GTK_WIDGET_REALIZED (widget))
+    gtk_widget_unrealize (widget);
   
   gtk_window_free_key_hash (window);
   window->screen = screen;
+  gtk_widget_reset_rc_styles (widget);
+  g_object_notify (G_OBJECT (window), "screen");
+
+  if (was_mapped)
+    gtk_widget_map (widget);
 }
+
 /** 
  * gtk_window_get_screen:
  * @window: a #GtkWindow.
index 7b86a2a870757cb1f36a62735788eb88e74008fb..7da76d5143f84b4b9ac08584c96c8c42ffe975f9 100644 (file)
@@ -735,7 +735,8 @@ properties_from_type (GObject     *object,
 
 /* Pass zero for type if you want all properties */
 GtkWidget*
-create_prop_editor (GObject *object, GType type)
+create_prop_editor (GObject   *object,
+                   GType      type)
 {
   GtkWidget *win;
   GtkWidget *notebook;
@@ -751,7 +752,10 @@ create_prop_editor (GObject *object, GType type)
     }
 
   win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
+  if (GTK_IS_WIDGET (object))
+    gtk_window_set_screen (GTK_WINDOW (win),
+                          gtk_widget_get_screen (GTK_WIDGET (object)));
+  
   tips = gtk_tooltips_new ();
   gtk_signal_connect_object (GTK_OBJECT (win), "destroy",
                             GTK_SIGNAL_FUNC (gtk_object_destroy), GTK_OBJECT (tips));
index a39537d82b138f13c5f1443d78eaac43d81ee6c9..1f86d9be116fb60f05fd006927014cae0d3d83e3 100644 (file)
@@ -23,8 +23,8 @@
 
 G_BEGIN_DECLS
 
-GtkWidget *create_prop_editor (GObject *object,
-                              GType    type);
+GtkWidget *create_prop_editor (GObject   *object,
+                              GType      type);
 
 G_END_DECLS
 
index 997ba0c63347c310290108964b06edaf1cdf3f4b..62c8036089130fedc2250fad515a81113996157c 100644 (file)
@@ -61,19 +61,20 @@ file_exists (const char *filename)
 }
 
 GtkWidget *
-shape_create_icon (char     *xpm_file,
-                  gint      x,
-                  gint      y,
-                  gint      px,
-                  gint      py,
-                  gint      window_type);
+shape_create_icon (GdkScreen *screen,
+                  char      *xpm_file,
+                  gint       x,
+                  gint       y,
+                  gint       px,
+                  gint       py,
+                  gint       window_type);
 
 static GtkWidget *
-build_option_menu (gchar    *items[],
-                  gint      num_items,
-                  gint      history,
-                  void    (*func)(GtkWidget *widget, gpointer data),
-                  gpointer  data);
+build_option_menu (gchar           *items[],
+                  gint             num_items,
+                  gint             history,
+                  void           (*func)(GtkWidget *widget, gpointer data),
+                  gpointer         data);
 
 /* macro, structure and variables used by tree window demos */
 #define DEFAULT_NUMBER_OF_ITEM  3
@@ -100,11 +101,11 @@ typedef struct sTreeButtons {
 /* end of tree section */
 
 static GtkWidget *
-build_option_menu (gchar     *items[],
-                  gint       num_items,
-                  gint       history,
-                  void     (*func)(GtkWidget *widget, gpointer data),
-                  gpointer   data)
+build_option_menu (gchar           *items[],
+                  gint             num_items,
+                  gint             history,
+                  void           (*func)(GtkWidget *widget, gpointer data),
+                  gpointer         data)
 {
   GtkWidget *omenu;
   GtkWidget *menu;
@@ -280,7 +281,7 @@ pattern_realize (GtkWidget *widget,
 }
 
 static void 
-create_big_windows (void)
+create_big_windows (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *darea, *table, *scrollbar;
@@ -289,7 +290,7 @@ create_big_windows (void)
   GtkAdjustment *vadj;
   static gint current_x;
   static gint current_y;
-
   if (!window)
     {
       current_x = 0;
@@ -300,6 +301,9 @@ create_big_windows (void)
                                             GTK_STOCK_CLOSE,
                                             GTK_RESPONSE_NONE,
                                             NULL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_window_set_default_size (GTK_WINDOW (window), 200, 300);
 
@@ -377,7 +381,7 @@ button_window (GtkWidget *widget,
 }
 
 static void
-create_buttons (void)
+create_buttons (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -389,6 +393,8 @@ create_buttons (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -499,7 +505,7 @@ create_buttons (void)
  */
 
 static void
-create_toggle_buttons (void)
+create_toggle_buttons (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -510,6 +516,8 @@ create_toggle_buttons (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -565,17 +573,19 @@ create_toggle_buttons (void)
  */
 
 static void
-create_check_buttons (void)
+create_check_buttons (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
   GtkWidget *box2;
   GtkWidget *button;
   GtkWidget *separator;
-
+  
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -631,7 +641,7 @@ create_check_buttons (void)
  */
 
 static void
-create_radio_buttons (void)
+create_radio_buttons (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -643,6 +653,9 @@ create_radio_buttons (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -766,7 +779,7 @@ create_bbox (gint  horizontal,
 }
 
 static void
-create_button_box (void)
+create_button_box (GtkWidget *widget)
 {
   static GtkWidget* window = NULL;
   GtkWidget *main_vbox;
@@ -774,10 +787,11 @@ create_button_box (void)
   GtkWidget *hbox;
   GtkWidget *frame_horz;
   GtkWidget *frame_vert;
-       
+
   if (!window)
   {
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_screen (GTK_WINDOW (window), gtk_widget_get_screen (widget));
     gtk_window_set_title (GTK_WINDOW (window), "Button Boxes");
     
     gtk_signal_connect (GTK_OBJECT (window), "destroy",
@@ -944,7 +958,7 @@ set_toolbar_disable (GtkWidget *widget,
 }
 
 static void
-create_toolbar (void)
+create_toolbar (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *toolbar;
@@ -953,6 +967,9 @@ create_toolbar (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+      
       gtk_window_set_title (GTK_WINDOW (window), "Toolbar test");
       gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
 
@@ -1198,7 +1215,7 @@ statusbar_contexts (GtkStatusbar *statusbar)
 }
 
 static void
-create_statusbar (void)
+create_statusbar (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -1210,6 +1227,8 @@ create_statusbar (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -1453,7 +1472,7 @@ create_subtree(GtkWidget* item, guint level, guint nb_item_max, guint recursion_
 }
 
 static void
-create_tree_sample(guint selection_mode, 
+create_tree_sample(GdkScreen *screen, guint selection_mode, 
                   guint draw_line, guint view_line, guint no_root_item,
                   guint nb_item_max, guint recursion_level_max) 
 {
@@ -1477,6 +1496,7 @@ create_tree_sample(guint selection_mode,
 
   /* create top level window */
   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_screen (GTK_WINDOW (window), screen);
   gtk_window_set_title(GTK_WINDOW(window), "Tree Sample");
   gtk_signal_connect(GTK_OBJECT(window), "destroy",
                     (GtkSignalFunc) cb_tree_destroy_event, NULL);
@@ -1614,11 +1634,13 @@ cb_create_tree(GtkWidget* w)
       return;
     }
 
-  create_tree_sample(selection_mode, draw_line, view_line, no_root_item, nb_item, recursion_level);
+  create_tree_sample(gtk_widget_get_screen (w),
+                    selection_mode, draw_line, 
+                    view_line, no_root_item, nb_item, recursion_level);
 }
 
 void 
-create_tree_mode_window(void)
+create_tree_mode_window(GtkWidget *widget)
 {
   static GtkWidget* window;
   GtkWidget* box1;
@@ -1637,6 +1659,8 @@ create_tree_mode_window(void)
     {
       /* create toplevel window  */
       window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
       gtk_window_set_title(GTK_WINDOW(window), "Set Tree Parameters");
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -1830,6 +1854,9 @@ gridded_geometry_response (GtkDialog *dialog,
                                             "Reset", 1,
                                             GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
                                             NULL);
+
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (GTK_WIDGET (dialog)));
       g_free (title);
       g_signal_connect (window, "response",
                        G_CALLBACK (gridded_geometry_subresponse), geometry_string);
@@ -1875,7 +1902,7 @@ gridded_geometry_response (GtkDialog *dialog,
 }
 
 static void 
-create_gridded_geometry (void)
+create_gridded_geometry (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *entry;
@@ -1888,6 +1915,9 @@ create_gridded_geometry (void)
                                            "Create", 1,
                                             GTK_STOCK_CLOSE, GTK_RESPONSE_NONE,
                                             NULL);
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       label = gtk_label_new ("Geometry string:");
       gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->vbox), label, FALSE, FALSE, 0);
@@ -1922,7 +1952,7 @@ handle_box_child_signal (GtkHandleBox *hb,
 }
 
 static void
-create_handle_box (void)
+create_handle_box (GtkWidget *widget)
 {
   static GtkWidget* window = NULL;
   GtkWidget *handle_box;
@@ -1932,10 +1962,14 @@ create_handle_box (void)
   GtkWidget *toolbar;
   GtkWidget *label;
   GtkWidget *separator;
-       
+
   if (!window)
   {
     window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    
+    gtk_window_set_screen (GTK_WINDOW (window),
+                          gtk_widget_get_screen (widget));
+
     gtk_window_set_title (GTK_WINDOW (window),
                          "Handle Box Test");
     gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
@@ -2250,7 +2284,7 @@ image_source_expose (GtkWidget *da,
 }
 
 static void
-create_get_image (void)
+create_get_image (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
 
@@ -2269,6 +2303,9 @@ create_get_image (void)
       gid = g_new (struct GetImageData, 1);
       
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window),
                           "destroy",
@@ -2424,7 +2461,7 @@ create_selectable_control (GtkWidget *widget)
   return button;
 }
 
-void create_labels (void)
+void create_labels (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *hbox;
@@ -2432,10 +2469,14 @@ void create_labels (void)
   GtkWidget *frame;
   GtkWidget *label;
   GtkWidget *button;
-  
+
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -2603,7 +2644,7 @@ set_parent_signal (GtkWidget *child,
 }
 
 static void
-create_reparent (void)
+create_reparent (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -2619,6 +2660,9 @@ create_reparent (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -2736,7 +2780,7 @@ uposition_stop_configure (GtkToggleButton *toggle,
 }
 
 static void
-create_saved_position (void)
+create_saved_position (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
 
@@ -2760,6 +2804,10 @@ create_saved_position (void)
                                 "signal::configure_event", uposition_configure, NULL,
                                 NULL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+      
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
                          &window);
@@ -2837,7 +2885,7 @@ create_saved_position (void)
  */
 
 static void
-create_pixmap (void)
+create_pixmap (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -2852,6 +2900,9 @@ create_pixmap (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                           GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                           &window);
@@ -2946,7 +2997,7 @@ tips_query_widget_selected (GtkWidget      *tips_query,
 }
 
 static void
-create_tooltips (void)
+create_tooltips (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -2972,6 +3023,9 @@ create_tooltips (void)
                        "GtkWidget::width", 200,
                        NULL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                           GTK_SIGNAL_FUNC (destroy_tooltips),
                           &window);
@@ -3094,10 +3148,10 @@ pack_image (GtkWidget *box,
 }
 
 static void
-create_image (void)
+create_image (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
-  
+
   if (window == NULL)
     {
       GtkWidget *vbox;
@@ -3105,6 +3159,10 @@ create_image (void)
       GdkBitmap *mask;
         
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       /* this is bogus for testing drawing when allocation < request,
        * don't copy into real code
        */
@@ -3143,7 +3201,7 @@ create_image (void)
  */
 
 static GtkWidget*
-create_menu (gint depth, gint length, gboolean tearoff)
+create_menu (GdkScreen *screen, gint depth, gint length, gboolean tearoff)
 {
   GtkWidget *menu;
   GtkWidget *menuitem;
@@ -3156,6 +3214,8 @@ create_menu (gint depth, gint length, gboolean tearoff)
     return NULL;
 
   menu = gtk_menu_new ();
+  gtk_menu_set_screen (GTK_MENU (menu), screen);
+
   group = NULL;
 
   if (tearoff)
@@ -3193,14 +3253,15 @@ create_menu (gint depth, gint length, gboolean tearoff)
                                               TRUE);
 
       if (i < 5)
-       gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (depth - 1, 5,  TRUE));
+       gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), 
+                                  create_menu (screen, depth - 1, 5,  TRUE));
     }
 
   return menu;
 }
 
 static void
-create_menus (void)
+create_menus (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -3216,8 +3277,11 @@ create_menus (void)
       GtkWidget *menuitem;
       GtkAccelGroup *accel_group;
       GtkWidget *image;
+      GdkScreen *screen = gtk_widget_get_screen (widget);
       
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (window), screen);
       
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -3241,7 +3305,7 @@ create_menus (void)
       gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
       gtk_widget_show (menubar);
       
-      menu = create_menu (2, 50, TRUE);
+      menu = create_menu (screen, 2, 50, TRUE);
       
       menuitem = gtk_menu_item_new_with_label ("test\nline2");
       gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
@@ -3249,7 +3313,7 @@ create_menus (void)
       gtk_widget_show (menuitem);
       
       menuitem = gtk_menu_item_new_with_label ("foo");
-      gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (3, 5, TRUE));
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 3, 5, TRUE));
       gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
       gtk_widget_show (menuitem);
 
@@ -3258,7 +3322,7 @@ create_menus (void)
       gtk_widget_show (image);
       menuitem = gtk_image_menu_item_new_with_label ("Help");
       gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menuitem), image);
-      gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (4, 5, TRUE));
+      gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), create_menu (screen, 4, 5, TRUE));
       gtk_menu_item_set_right_justified (GTK_MENU_ITEM (menuitem), TRUE);
       gtk_menu_bar_append (GTK_MENU_BAR (menubar), menuitem);
       gtk_widget_show (menuitem);
@@ -3267,7 +3331,7 @@ create_menus (void)
       gtk_box_pack_start (GTK_BOX (box1), menubar, FALSE, TRUE, 0);
       gtk_widget_show (menubar);
       
-      menu = create_menu (2, 10, TRUE);
+      menu = create_menu (screen, 2, 10, TRUE);
       
       menuitem = gtk_menu_item_new_with_label ("Second menu bar");
       gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem), menu);
@@ -3279,7 +3343,7 @@ create_menus (void)
       gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
       gtk_widget_show (box2);
       
-      menu = create_menu (1, 5, FALSE);
+      menu = create_menu (screen, 1, 5, FALSE);
       gtk_menu_set_accel_group (GTK_MENU (menu), accel_group);
 
       menuitem = gtk_image_menu_item_new_from_stock (GTK_STOCK_NEW, accel_group);
@@ -3521,7 +3585,7 @@ static GtkItemFactoryEntry menu_items[] =
 static int nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]);
 
 static void
-create_item_factory (void)
+create_item_factory (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   
@@ -3537,6 +3601,9 @@ create_item_factory (void)
       
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
       
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+      
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -3625,10 +3692,10 @@ accel_button_new (GtkAccelGroup *accel_group,
 }
 
 static void
-create_key_lookup (void)
+create_key_lookup (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
-  
+
   if (!window)
     {
       GtkAccelGroup *accel_group = gtk_accel_group_new ();
@@ -3638,6 +3705,9 @@ create_key_lookup (void)
                                            GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
                                            NULL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       /* We have to expand it so the accel labels will draw their labels
        */
       gtk_window_set_default_size (GTK_WINDOW (window), 300, -1);
@@ -3695,6 +3765,8 @@ cmw_color (GtkWidget *widget, GtkWidget *parent)
 
     csd=gtk_color_selection_dialog_new ("This is a modal color selection dialog");
 
+    gtk_window_set_screen (GTK_WINDOW (csd), gtk_widget_get_screen (parent));
+
     gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (GTK_COLOR_SELECTION_DIALOG (csd)->colorsel),
                                          TRUE);
     
@@ -3726,6 +3798,8 @@ cmw_file (GtkWidget *widget, GtkWidget *parent)
 
     fs = gtk_file_selection_new("This is a modal file selection dialog");
 
+    gtk_window_set_screen (GTK_WINDOW (fs), gtk_widget_get_screen (parent));
+
     /* Set as modal */
     gtk_window_set_modal (GTK_WINDOW(fs),TRUE);
 
@@ -3750,7 +3824,7 @@ cmw_file (GtkWidget *widget, GtkWidget *parent)
 
 
 static void
-create_modal_window (void)
+create_modal_window (GtkWidget *widget)
 {
   GtkWidget *window = NULL;
   GtkWidget *box1,*box2;
@@ -3758,7 +3832,10 @@ create_modal_window (void)
   GtkWidget *btnColor,*btnFile,*btnClose;
 
   /* Create modal window (Here you can use any window descendent )*/
-  window=gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_screen (GTK_WINDOW (window),
+                        gtk_widget_get_screen (widget));
+
   gtk_window_set_title (GTK_WINDOW(window),"This window is modal");
 
   /* Set window as modal */
@@ -3810,7 +3887,8 @@ create_modal_window (void)
  */
 
 static void
-make_message_dialog (GtkWidget **dialog,
+make_message_dialog (GdkScreen *screen,
+                    GtkWidget **dialog,
                      GtkMessageType  type,
                      GtkButtonsType  buttons,
                     guint           default_response)
@@ -3825,6 +3903,8 @@ make_message_dialog (GtkWidget **dialog,
   *dialog = gtk_message_dialog_new (NULL, 0, type, buttons,
                                     "This is a message dialog; it can wrap long lines. This is a long line. La la la. Look this line is wrapped. Blah blah blah blah blah blah. (Note: testgtk has a nonstandard gtkrc that changes some of the message dialog icons.)");
 
+  gtk_window_set_screen (GTK_WINDOW (*dialog), screen);
+
   gtk_signal_connect_object (GTK_OBJECT (*dialog),
                              "response",
                              GTK_SIGNAL_FUNC (gtk_widget_destroy),
@@ -3841,17 +3921,18 @@ make_message_dialog (GtkWidget **dialog,
 }
 
 static void
-create_message_dialog (void)
+create_message_dialog (GtkWidget *widget)
 {
   static GtkWidget *info = NULL;
   static GtkWidget *warning = NULL;
   static GtkWidget *error = NULL;
   static GtkWidget *question = NULL;
+  GdkScreen *screen = gtk_widget_get_screen (widget);
 
-  make_message_dialog (&info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, GTK_RESPONSE_OK);
-  make_message_dialog (&warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, GTK_RESPONSE_OK);
-  make_message_dialog (&error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, GTK_RESPONSE_OK);
-  make_message_dialog (&question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, GTK_RESPONSE_YES);
+  make_message_dialog (screen, &info, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, GTK_RESPONSE_OK);
+  make_message_dialog (screen, &warning, GTK_MESSAGE_WARNING, GTK_BUTTONS_CLOSE, GTK_RESPONSE_OK);
+  make_message_dialog (screen, &error, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK_CANCEL, GTK_RESPONSE_OK);
+  make_message_dialog (screen, &question, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, GTK_RESPONSE_YES);
 }
 
 /*
@@ -3902,6 +3983,9 @@ scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
     {
       sw_parent = scrollwin->parent;
       sw_float_parent = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (sw_float_parent),
+                            gtk_widget_get_screen (widget));
+      
       gtk_window_set_default_size (GTK_WINDOW (sw_float_parent), 200, 200);
       
       gtk_widget_reparent (scrollwin, sw_float_parent);
@@ -3916,7 +4000,7 @@ scrolled_windows_remove (GtkWidget *widget, GtkWidget *scrollwin)
 }
 
 static void
-create_scrolled_windows (void)
+create_scrolled_windows (GtkWidget *widget)
 {
   static GtkWidget *window;
   GtkWidget *scrolled_window;
@@ -3929,6 +4013,9 @@ create_scrolled_windows (void)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -4025,7 +4112,7 @@ entry_props_clicked (GtkWidget *button,
 }
 
 static void
-create_entry (void)
+create_entry (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -4052,6 +4139,8 @@ create_entry (void)
       cbitems = g_list_append(cbitems, "item9 item9");
 
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -4149,7 +4238,8 @@ size_group_vsize_changed (GtkSpinButton *spin_button,
 }
 
 static GtkWidget *
-create_size_group_window (GtkSizeGroup *master_size_group)
+create_size_group_window (GdkScreen    *screen,
+                         GtkSizeGroup *master_size_group)
 {
   GtkWidget *window;
   GtkWidget *table;
@@ -4168,6 +4258,8 @@ create_size_group_window (GtkSizeGroup *master_size_group)
                                        GTK_RESPONSE_NONE,
                                        NULL);
 
+  gtk_window_set_screen (GTK_WINDOW (window), screen);
+
   gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
 
   gtk_signal_connect (GTK_OBJECT (window), "response",
@@ -4246,7 +4338,7 @@ create_size_group_window (GtkSizeGroup *master_size_group)
 }
 
 static void
-create_size_groups (void)
+create_size_groups (GtkWidget *widget)
 {
   static GtkWidget *window1 = NULL;
   static GtkWidget *window2 = NULL;
@@ -4254,10 +4346,11 @@ create_size_groups (void)
 
   if (!master_size_group)
     master_size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
-  
+
   if (!window1)
     {
-      window1 = create_size_group_window (master_size_group);
+      window1 = create_size_group_window (gtk_widget_get_screen (widget),
+                                         master_size_group);
 
       gtk_signal_connect (GTK_OBJECT (window1), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -4266,7 +4359,8 @@ create_size_groups (void)
 
   if (!window2)
     {
-      window2 = create_size_group_window (master_size_group);
+      window2 = create_size_group_window (gtk_widget_get_screen (widget),
+                                         master_size_group);
 
       gtk_signal_connect (GTK_OBJECT (window2), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -4445,7 +4539,7 @@ spin_button_hex_output_func (GtkSpinButton *spin_button)
 }
 
 static void
-create_spins (void)
+create_spins (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *frame;
@@ -4463,6 +4557,8 @@ create_spins (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
       
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -4732,7 +4828,7 @@ set_cursor (GtkWidget *spinner,
   else
     gtk_label_set_text (GTK_LABEL (label), "<unknown>");
 
-  cursor = gdk_cursor_new (c);
+  cursor = gdk_cursor_new_for_screen (gtk_widget_get_screen (widget), c);
   gdk_window_set_cursor (widget->window, cursor);
   gdk_cursor_unref (cursor);
 }
@@ -4755,7 +4851,7 @@ cursor_event (GtkWidget          *widget,
 }
 
 static void
-create_cursors (void)
+create_cursors (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *frame;
@@ -4772,6 +4868,8 @@ create_cursors (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (widget));
       
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -4960,7 +5058,7 @@ list_toggle_sel_mode (GtkWidget *widget, gpointer data)
 }
 
 static void
-create_list (void)
+create_list (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
 
@@ -4970,7 +5068,7 @@ create_list (void)
     "Browse",
     "Multiple"
   };
-
+  
   if (!window)
     {
       GtkWidget *cbox;
@@ -4985,6 +5083,9 @@ create_list (void)
 
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -5445,7 +5546,7 @@ clist_click_column (GtkCList *clist, gint column, gpointer data)
 }
 
 static void
-create_clist (void)
+create_clist (GtkWidget *widget)
 {
   gint i;
   static GtkWidget *window = NULL;
@@ -5486,6 +5587,8 @@ create_clist (void)
     {
       clist_rows = 0;
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed), &window);
@@ -5672,12 +5775,15 @@ create_clist (void)
  * GtkCTree
  */
 
-GdkPixmap *pixmap1;
-GdkPixmap *pixmap2;
-GdkPixmap *pixmap3;
-GdkBitmap *mask1;
-GdkBitmap *mask2;
-GdkBitmap *mask3;
+typedef struct 
+{
+  GdkPixmap *pixmap1;
+  GdkPixmap *pixmap2;
+  GdkPixmap *pixmap3;
+  GdkBitmap *mask1;
+  GdkBitmap *mask2;
+  GdkBitmap *mask3;
+} CTreePixmaps;
 
 static gint books = 0;
 static gint pages = 0;
@@ -5695,6 +5801,34 @@ static GtkWidget *spin2;
 static GtkWidget *spin3;
 static gint line_style;
 
+
+static CTreePixmaps *
+get_ctree_pixmaps (GtkCTree *ctree)
+{
+  GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (ctree));
+  CTreePixmaps *pixmaps = g_object_get_data (G_OBJECT (screen), "ctree-pixmaps");
+
+  if (!pixmaps)
+    {
+      GdkColormap *colormap = gdk_screen_get_rgb_colormap (screen);
+      pixmaps = g_new (CTreePixmaps, 1);
+      
+      pixmaps->pixmap1 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
+                                                               &pixmaps->mask1, 
+                                                               NULL, book_closed_xpm);
+      pixmaps->pixmap2 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
+                                                               &pixmaps->mask2, 
+                                                               NULL, book_open_xpm);
+      pixmaps->pixmap3 = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap,
+                                                               &pixmaps->mask3,
+                                                               NULL, mini_page_xpm);
+      
+      g_object_set_data (G_OBJECT (screen), "ctree-pixmaps", pixmaps);
+    }
+
+  return pixmaps;
+}
+
 void after_press (GtkCTree *ctree, gpointer data)
 {
   char buf[80];
@@ -5869,23 +6003,26 @@ gnode2ctree (GtkCTree   *ctree,
   GdkBitmap *mask_closed;
   GdkPixmap *pixmap_opened;
   GdkBitmap *mask_opened;
+  CTreePixmaps *pixmaps;
 
   if (!cnode || !gnode || (!(es = gnode->data)))
     return FALSE;
 
+  pixmaps = get_ctree_pixmaps (ctree);
+
   if (es->is_leaf)
     {
-      pixmap_closed = pixmap3;
-      mask_closed = mask3;
+      pixmap_closed = pixmaps->pixmap3;
+      mask_closed = pixmaps->mask3;
       pixmap_opened = NULL;
       mask_opened = NULL;
     }
   else
     {
-      pixmap_closed = pixmap1;
-      mask_closed = mask1;
-      pixmap_opened = pixmap2;
-      mask_opened = mask2;
+      pixmap_closed = pixmaps->pixmap1;
+      mask_closed = pixmaps->mask1;
+      pixmap_opened = pixmaps->pixmap2;
+      mask_opened = pixmaps->mask2;
     }
 
   gtk_ctree_set_node_info (ctree, cnode, es->tree, 2, pixmap_closed,
@@ -5933,6 +6070,9 @@ void export_ctree (GtkWidget *widget, GtkCTree *ctree)
   if (!export_window)
     {
       export_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (export_window),
+                            gtk_widget_get_screen (widget));
   
       gtk_signal_connect (GTK_OBJECT (export_window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -6103,19 +6243,22 @@ void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
   gchar buf1[60];
   gchar buf2[60];
   GtkCTreeNode *sibling;
+  CTreePixmaps *pixmaps;
   gint i;
 
   text[0] = buf1;
   text[1] = buf2;
   sibling = NULL;
 
+  pixmaps = get_ctree_pixmaps (ctree);
+
   for (i = num_pages + num_books; i > num_books; i--)
     {
       pages++;
       sprintf (buf1, "Page %02d", (gint) rand() % 100);
       sprintf (buf2, "Item %d-%d", cur_depth, i);
       sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
-                                      pixmap3, mask3, NULL, NULL,
+                                      pixmaps->pixmap3, pixmaps->mask3, NULL, NULL,
                                       TRUE, FALSE);
 
       if (parent && ctree->line_style == GTK_CTREE_LINES_TABBED)
@@ -6134,7 +6277,7 @@ void build_recursive (GtkCTree *ctree, gint cur_depth, gint depth,
       sprintf (buf1, "Book %02d", (gint) rand() % 100);
       sprintf (buf2, "Item %d-%d", cur_depth, i);
       sibling = gtk_ctree_insert_node (ctree, parent, sibling, text, 5,
-                                      pixmap1, mask1, pixmap2, mask2,
+                                      pixmaps->pixmap1, pixmaps->mask1, pixmaps->pixmap2, pixmaps->mask2,
                                       FALSE, FALSE);
 
       style = gtk_style_new ();
@@ -6175,6 +6318,9 @@ void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
   GtkCTreeNode *parent;
   GtkStyle *style;
   guint b, d, p, n;
+  CTreePixmaps *pixmaps;
+
+  pixmaps = get_ctree_pixmaps (ctree);
 
   text[0] = label1;
   text[1] = label2;
@@ -6197,8 +6343,8 @@ void rebuild_tree (GtkWidget *widget, GtkCTree *ctree)
   books = 1;
   pages = 0;
 
-  parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmap1,
-                                 mask1, pixmap2, mask2, FALSE, TRUE);
+  parent = gtk_ctree_insert_node (ctree, NULL, NULL, text, 5, pixmaps->pixmap1,
+                                 pixmaps->mask1, pixmaps->pixmap2, pixmaps->mask2, FALSE, TRUE);
 
   style = gtk_style_new ();
   style->base[GTK_STATE_NORMAL].red   = 0;
@@ -6235,7 +6381,7 @@ ctree_click_column (GtkCTree *ctree, gint column, gpointer data)
   gtk_ctree_sort_recursive (ctree, NULL);
 }
 
-void create_ctree (void)
+void create_ctree (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkTooltips *tooltips;
@@ -6252,7 +6398,6 @@ void create_ctree (void)
   GtkWidget *check;
   GtkAdjustment *adj;
   GtkWidget *spinner;
-  GdkColor transparent = { 0 };
 
   char *title[] = { "Tree" , "Info" };
   char buf[80];
@@ -6289,6 +6434,8 @@ void create_ctree (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -6503,17 +6650,7 @@ void create_ctree (void)
                            NULL);
 
       gtk_widget_realize (window);
-
-      if (!pixmap1)
-       pixmap1 = gdk_pixmap_create_from_xpm_d (window->window, &mask1, 
-                                               &transparent, book_closed_xpm);
-      if (!pixmap2)
-       pixmap2 = gdk_pixmap_create_from_xpm_d (window->window, &mask2, 
-                                               &transparent, book_open_xpm);
-      if (!pixmap3)
-       pixmap3 = gdk_pixmap_create_from_xpm_d (window->window, &mask3,
-                                               &transparent, mini_page_xpm);
-
+      
       gtk_widget_set_usize (GTK_WIDGET (ctree), 0, 300);
 
       frame = gtk_frame_new (NULL);
@@ -6645,7 +6782,7 @@ palette_toggled_cb (GtkWidget *w,
 }
 
 void
-create_color_selection (void)
+create_color_selection (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
 
@@ -6655,6 +6792,9 @@ create_color_selection (void)
       GtkWidget *check_button;
       
       window = gtk_color_selection_dialog_new ("color selection dialog");
+      gtk_window_set_screen (GTK_WINDOW (window), 
+                            gtk_widget_get_screen (widget));
+                            
       gtk_widget_show (GTK_COLOR_SELECTION_DIALOG (window)->help_button);
 
       gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
@@ -6749,7 +6889,7 @@ file_selection_ok (GtkFileSelection *fs)
 }
 
 void
-create_file_selection (void)
+create_file_selection (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -6757,6 +6897,8 @@ create_file_selection (void)
   if (!window)
     {
       window = gtk_file_selection_new ("file selection dialog");
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_file_selection_hide_fileop_buttons (GTK_FILE_SELECTION (window));
 
@@ -6808,7 +6950,7 @@ flipping_toggled_cb (GtkWidget *widget, gpointer data)
 }
 
 void
-create_flipping (void)
+create_flipping (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *check_button, *button;
@@ -6817,6 +6959,9 @@ create_flipping (void)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -6897,10 +7042,10 @@ make_focus_table (GList **list)
 }
 
 static void
-create_focus (void)
+create_focus (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
-
+  
   if (!window)
     {
       GtkWidget *table;
@@ -6913,6 +7058,9 @@ create_focus (void)
                                             GTK_RESPONSE_NONE,
                                             NULL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
                          &window);
@@ -6972,13 +7120,16 @@ font_selection_ok (GtkWidget              *w,
 }
 
 void
-create_font_selection (void)
+create_font_selection (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
 
   if (!window)
     {
       window = gtk_font_selection_dialog_new ("Font Selection Dialog");
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_MOUSE);
 
@@ -7043,7 +7194,7 @@ print_response (GtkWidget *dialog,
 }
 
 static void
-create_dialog (void)
+create_dialog (GtkWidget *widget)
 {
   static GtkWidget *label;
   GtkWidget *button;
@@ -7056,6 +7207,8 @@ create_dialog (void)
        */
       
       dialog_window = gtk_dialog_new ();
+      gtk_window_set_screen (GTK_WINDOW (dialog_window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (dialog_window),
                           "response",
@@ -7103,6 +7256,169 @@ create_dialog (void)
     gtk_widget_destroy (dialog_window);
 }
 
+/* Display & Screen test 
+ */
+
+typedef struct 
+{ 
+  GtkEntry *entry;
+  GtkWidget *radio_dpy;
+  GtkWidget *toplevel; 
+  GtkWidget *dialog_window;
+  GList *valid_display_list;
+} ScreenDisplaySelection;
+
+static gint
+display_name_cmp (gconstpointer a,
+                 gconstpointer b)
+{
+  return g_ascii_strcasecmp (a,b);
+}
+
+static void
+screen_display_check (GtkWidget *widget, ScreenDisplaySelection *data)
+{
+  char *display_name;
+  GdkDisplay *display = gtk_widget_get_display (widget);
+  GtkWidget *dialog;
+  GdkScreen *new_screen = NULL;
+  GdkScreen *current_screen = gtk_widget_get_screen (widget);
+  
+  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->radio_dpy)))
+    {
+      display_name = g_strdup (gtk_entry_get_text (data->entry));
+      display = gdk_open_display (display_name);
+      
+      if (!display)
+       {
+         dialog = gtk_message_dialog_new (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
+                                          GTK_DIALOG_DESTROY_WITH_PARENT,
+                                          GTK_MESSAGE_ERROR,
+                                          GTK_BUTTONS_OK,
+                                          "The display :\n%s\ncannot be opened",
+                                          display_name);
+         gtk_window_set_screen (GTK_WINDOW (dialog), current_screen);
+         gtk_widget_show (dialog);
+         g_signal_connect (G_OBJECT (dialog), "response",
+                           G_CALLBACK (gtk_widget_destroy),
+                           NULL);
+       }
+      else
+       {
+         if (!g_list_find_custom (data->valid_display_list, 
+                                  display_name,
+                                  display_name_cmp))
+           data->valid_display_list = g_list_append (data->valid_display_list,
+                                                     display_name);
+         
+         new_screen = gdk_display_get_default_screen (display);
+       }
+    }
+  else
+    {
+      gint number_of_screens = gdk_display_get_n_screens (display);
+      gint screen_num = gdk_screen_get_number (current_screen);
+      if ((screen_num +1) < number_of_screens)
+       new_screen = gdk_display_get_screen (display, screen_num + 1);
+      else
+       new_screen = gdk_display_get_screen (display, 0);
+    }
+  
+  if (new_screen) 
+    {
+      gtk_window_set_screen (GTK_WINDOW (data->toplevel), new_screen);
+      gtk_widget_destroy (data->dialog_window);
+    }
+}
+
+void
+screen_display_destroy_diag (GtkWidget *widget, GtkWidget *data)
+{
+  gtk_widget_destroy (data);
+}
+
+void
+create_display_screen (GtkWidget *widget)
+{
+  GtkWidget *table, *frame, *window, *combo_dpy, *vbox;
+  GtkWidget *radio_dpy, *radio_scr, *applyb, *cancelb;
+  GtkWidget *bbox;
+  ScreenDisplaySelection *scr_dpy_data;
+  GdkScreen *screen = gtk_widget_get_screen (widget);
+  static GList *valid_display_list = NULL;
+  
+  GdkDisplay *display = gdk_screen_get_display (screen);
+
+  window = gtk_widget_new (gtk_window_get_type (),
+                          "screen", screen,
+                          "user_data", NULL,
+                          "type", GTK_WINDOW_TOPLEVEL,
+                          "title",
+                          "Screen or Display selection",
+                          "border_width", 10, NULL);
+  g_signal_connect (G_OBJECT (window), "destroy", 
+                   G_CALLBACK (gtk_widget_destroy), NULL);
+
+  vbox = gtk_vbox_new (FALSE, 3);
+  gtk_container_add (GTK_CONTAINER (window), vbox);
+  
+  frame = gtk_frame_new ("Select screen or display");
+  gtk_container_add (GTK_CONTAINER (vbox), frame);
+  
+  table = gtk_table_new (2, 2, TRUE);
+  gtk_table_set_row_spacings (GTK_TABLE (table), 3);
+  gtk_table_set_col_spacings (GTK_TABLE (table), 3);
+
+  gtk_container_add (GTK_CONTAINER (frame), table);
+
+  radio_dpy = gtk_radio_button_new_with_label (NULL, "move to another X display");
+  if (gdk_display_get_n_screens(display) > 1)
+    radio_scr = gtk_radio_button_new_with_label 
+    (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), "move to next screen");
+  else
+    {    
+      radio_scr = gtk_radio_button_new_with_label 
+       (gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_dpy)), 
+        "only one screen on the current display");
+      gtk_widget_set_sensitive (radio_scr, FALSE);
+    }
+  combo_dpy = gtk_combo_new ();
+  if (!valid_display_list)
+    valid_display_list = g_list_append (valid_display_list, "diabolo:0.0");
+    
+  gtk_combo_set_popdown_strings (GTK_COMBO (combo_dpy), valid_display_list);
+    
+  gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (combo_dpy)->entry), 
+                     "<hostname>:<X Server Num>.<Screen Num>");
+
+  gtk_table_attach_defaults (GTK_TABLE (table), radio_dpy, 0, 1, 0, 1);
+  gtk_table_attach_defaults (GTK_TABLE (table), radio_scr, 0, 1, 1, 2);
+  gtk_table_attach_defaults (GTK_TABLE (table), combo_dpy, 1, 2, 0, 1);
+
+  bbox = gtk_hbutton_box_new ();
+  applyb = gtk_button_new_from_stock (GTK_STOCK_APPLY);
+  cancelb = gtk_button_new_from_stock (GTK_STOCK_CANCEL);
+  
+  gtk_container_add (GTK_CONTAINER (vbox), bbox);
+
+  gtk_container_add (GTK_CONTAINER (bbox), applyb);
+  gtk_container_add (GTK_CONTAINER (bbox), cancelb);
+
+  scr_dpy_data = g_new0 (ScreenDisplaySelection, 1);
+
+  scr_dpy_data->entry = GTK_ENTRY (GTK_COMBO (combo_dpy)->entry);
+  scr_dpy_data->radio_dpy = radio_dpy;
+  scr_dpy_data->toplevel = gtk_widget_get_toplevel (widget);
+  scr_dpy_data->dialog_window = window;
+  scr_dpy_data->valid_display_list = valid_display_list;
+
+  g_signal_connect (G_OBJECT (cancelb), "clicked", 
+                   G_CALLBACK (screen_display_destroy_diag), G_OBJECT (window));
+  g_signal_connect (G_OBJECT (applyb), "clicked", 
+                   G_CALLBACK (screen_display_check), scr_dpy_data);
+  gtk_widget_show_all (window);
+}
+
 /* Event Watcher
  */
 static gboolean event_watcher_enter_id = 0;
@@ -7154,13 +7470,15 @@ event_watcher_toggle (void)
 }
 
 static void
-create_event_watcher (void)
+create_event_watcher (GtkWidget *widget)
 {
   GtkWidget *button;
 
   if (!dialog_window)
     {
       dialog_window = gtk_dialog_new ();
+      gtk_window_set_screen (GTK_WINDOW (dialog_window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (dialog_window), "destroy",
                          GTK_SIGNAL_FUNC (gtk_widget_destroyed),
@@ -7213,7 +7531,7 @@ reformat_value (GtkScale *scale,
 }
 
 static void
-create_range_controls (void)
+create_range_controls (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -7229,6 +7547,9 @@ create_range_controls (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -7335,7 +7656,7 @@ create_range_controls (void)
  */
 
 void
-create_rulers (void)
+create_rulers (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *table;
@@ -7344,6 +7665,10 @@ create_rulers (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_window_set_policy (GTK_WINDOW (window), TRUE, TRUE, FALSE);
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
@@ -7443,7 +7768,7 @@ text_insert_random (GtkWidget *w, GtkText *text)
 }
 
 void
-create_text (void)
+create_text (GtkWidget *widget)
 {
   int i, j;
 
@@ -7462,6 +7787,9 @@ create_text (void)
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_widget_set_name (window, "text window");
       gtk_widget_set_usize (window, 500, 500);
       gtk_window_set_policy (GTK_WINDOW(window), TRUE, TRUE, FALSE);
@@ -7604,15 +7932,12 @@ create_text (void)
  * GtkNotebook
  */
 
-GdkPixmap *book_open;
-GdkPixmap *book_closed;
-GdkBitmap *book_open_mask;
-GdkBitmap *book_closed_mask;
+GdkPixbuf *book_open;
+GdkPixbuf *book_closed;
 GtkWidget *sample_notebook;
 
 static void
-set_page_pixmaps (GtkNotebook *notebook, gint page_num,
-                 GdkPixmap *pixmap, GdkPixmap *mask)
+set_page_image (GtkNotebook *notebook, gint page_num, GdkPixbuf *pixbuf)
 {
   GtkWidget *page_widget;
   GtkWidget *pixwid;
@@ -7620,10 +7945,10 @@ set_page_pixmaps (GtkNotebook *notebook, gint page_num,
   page_widget = gtk_notebook_get_nth_page (notebook, page_num);
 
   pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "tab_pixmap");
-  gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
   
   pixwid = gtk_object_get_data (GTK_OBJECT (page_widget), "menu_pixmap");
-  gtk_pixmap_set (GTK_PIXMAP (pixwid), pixmap, mask);
+  gtk_image_set_from_pixbuf (GTK_IMAGE (pixwid), pixbuf);
 }
 
 static void
@@ -7635,10 +7960,10 @@ page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num)
   if (page_num == old_page_num)
     return;
 
-  set_page_pixmaps (notebook, page_num, book_open, book_open_mask);
+  set_page_image (notebook, page_num, book_open);
 
   if (old_page_num != -1)
-    set_page_pixmaps (notebook, old_page_num, book_closed, book_closed_mask);
+    set_page_image (notebook, old_page_num, book_closed);
 }
 
 static void
@@ -7733,7 +8058,7 @@ create_pages (GtkNotebook *notebook, gint start, gint end)
       gtk_widget_show_all (child);
 
       label_box = gtk_hbox_new (FALSE, 0);
-      pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
+      pixwid = gtk_image_new_from_pixbuf (book_closed);
       gtk_object_set_data (GTK_OBJECT (child), "tab_pixmap", pixwid);
                           
       gtk_box_pack_start (GTK_BOX (label_box), pixwid, FALSE, TRUE, 0);
@@ -7744,7 +8069,7 @@ create_pages (GtkNotebook *notebook, gint start, gint end)
       
                                       
       menu_box = gtk_hbox_new (FALSE, 0);
-      pixwid = gtk_pixmap_new (book_closed, book_closed_mask);
+      pixwid = gtk_image_new_from_pixbuf (book_closed);
       gtk_object_set_data (GTK_OBJECT (child), "menu_pixmap", pixwid);
       
       gtk_box_pack_start (GTK_BOX (menu_box), pixwid, FALSE, TRUE, 0);
@@ -7846,7 +8171,7 @@ notebook_homogeneous (GtkToggleButton *button,
 }
 
 static void
-create_notebook (void)
+create_notebook (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *box1;
@@ -7854,7 +8179,6 @@ create_notebook (void)
   GtkWidget *button;
   GtkWidget *separator;
   GtkWidget *omenu;
-  GdkColor *transparent = NULL;
   GtkWidget *label;
 
   static gchar *items[] =
@@ -7864,10 +8188,12 @@ create_notebook (void)
     "Borderless",
     "Scrollable"
   };
-
+  
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -7887,16 +8213,12 @@ create_notebook (void)
       gtk_container_set_border_width (GTK_CONTAINER (sample_notebook), 10);
 
       gtk_widget_realize (sample_notebook);
+
       if (!book_open)
-       book_open = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
-                                                 &book_open_mask, 
-                                                 transparent, 
-                                                 book_open_xpm);
+       book_open = gdk_pixbuf_new_from_xpm_data ((const char **)book_open_xpm);
+                                                 
       if (!book_closed)
-       book_closed = gdk_pixmap_create_from_xpm_d (sample_notebook->window,
-                                                   &book_closed_mask,
-                                                   transparent, 
-                                                   book_closed_xpm);
+       book_closed = gdk_pixbuf_new_from_xpm_data ((const char **)book_closed_xpm);
 
       create_pages (GTK_NOTEBOOK (sample_notebook), 1, 5);
 
@@ -8023,7 +8345,7 @@ paned_props_clicked (GtkWidget *button,
                     GObject   *paned)
 {
   GtkWidget *window = create_prop_editor (paned, GTK_TYPE_PANED);
-
+  
   gtk_window_set_title (GTK_WINDOW (window), "Paned Properties");
 }
 
@@ -8098,7 +8420,7 @@ create_pane_options (GtkPaned    *paned,
 }
 
 void
-create_panes (void)
+create_panes (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *frame;
@@ -8111,6 +8433,9 @@ create_panes (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+      
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -8176,7 +8501,7 @@ create_panes (void)
  */
 
 static GtkWidget*
-paned_keyboard_window1 (void)
+paned_keyboard_window1 (GtkWidget *widget)
 {
   GtkWidget *window1;
   GtkWidget *hpaned1;
@@ -8201,6 +8526,8 @@ paned_keyboard_window1 (void)
 
   window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title (GTK_WINDOW (window1), "Basic paned navigation");
+  gtk_window_set_screen (GTK_WINDOW (window1), 
+                        gtk_widget_get_screen (widget));
 
   hpaned1 = gtk_hpaned_new ();
   gtk_container_add (GTK_CONTAINER (window1), hpaned1);
@@ -8276,7 +8603,7 @@ paned_keyboard_window1 (void)
 }
 
 static GtkWidget*
-paned_keyboard_window2 (void)
+paned_keyboard_window2 (GtkWidget *widget)
 {
   GtkWidget *window2;
   GtkWidget *hpaned2;
@@ -8293,6 +8620,9 @@ paned_keyboard_window2 (void)
   window2 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
   gtk_window_set_title (GTK_WINDOW (window2), "\"button 10\" is not inside the horisontal pane");
 
+  gtk_window_set_screen (GTK_WINDOW (window2), 
+                        gtk_widget_get_screen (widget));
+
   hpaned2 = gtk_hpaned_new ();
   gtk_container_add (GTK_CONTAINER (window2), hpaned2);
 
@@ -8330,7 +8660,7 @@ paned_keyboard_window2 (void)
 }
 
 static GtkWidget*
-paned_keyboard_window3 (void)
+paned_keyboard_window3 (GtkWidget *widget)
 {
   GtkWidget *window3;
   GtkWidget *vbox2;
@@ -8351,6 +8681,10 @@ paned_keyboard_window3 (void)
   gtk_object_set_data (GTK_OBJECT (window3), "window3", window3);
   gtk_window_set_title (GTK_WINDOW (window3), "Nested panes");
 
+  gtk_window_set_screen (GTK_WINDOW (window3), 
+                        gtk_widget_get_screen (widget));
+  
+
   vbox2 = gtk_vbox_new (FALSE, 0);
   gtk_container_add (GTK_CONTAINER (window3), vbox2);
 
@@ -8398,7 +8732,7 @@ paned_keyboard_window3 (void)
 }
 
 static GtkWidget*
-paned_keyboard_window4 (void)
+paned_keyboard_window4 (GtkWidget *widget)
 {
   GtkWidget *window4;
   GtkWidget *vbox3;
@@ -8422,6 +8756,9 @@ paned_keyboard_window4 (void)
   gtk_object_set_data (GTK_OBJECT (window4), "window4", window4);
   gtk_window_set_title (GTK_WINDOW (window4), "window4");
 
+  gtk_window_set_screen (GTK_WINDOW (window4), 
+                        gtk_widget_get_screen (widget));
+
   vbox3 = gtk_vbox_new (FALSE, 0);
   gtk_container_add (GTK_CONTAINER (window4), vbox3);
 
@@ -8475,16 +8812,25 @@ paned_keyboard_window4 (void)
 }
 
 static void
-create_paned_keyboard_navigation (void)
+create_paned_keyboard_navigation (GtkWidget *widget)
 {
   static GtkWidget *window1 = NULL;
   static GtkWidget *window2 = NULL;
   static GtkWidget *window3 = NULL;
   static GtkWidget *window4 = NULL;
 
+  if (window1 && 
+     (gtk_widget_get_screen (window1) != gtk_widget_get_screen (widget)))
+    {
+      gtk_widget_destroy (window1);
+      gtk_widget_destroy (window2);
+      gtk_widget_destroy (window3);
+      gtk_widget_destroy (window4);
+    }
+  
   if (!window1)
     {
-      window1 = paned_keyboard_window1 ();
+      window1 = paned_keyboard_window1 (widget);
       gtk_signal_connect (GTK_OBJECT (window1), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window1);
@@ -8492,7 +8838,7 @@ create_paned_keyboard_navigation (void)
 
   if (!window2)
     {
-      window2 = paned_keyboard_window2 ();
+      window2 = paned_keyboard_window2 (widget);
       gtk_signal_connect (GTK_OBJECT (window2), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window2);
@@ -8500,7 +8846,7 @@ create_paned_keyboard_navigation (void)
 
   if (!window3)
     {
-      window3 = paned_keyboard_window3 ();
+      window3 = paned_keyboard_window3 (widget);
       gtk_signal_connect (GTK_OBJECT (window3), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window3);
@@ -8508,7 +8854,7 @@ create_paned_keyboard_navigation (void)
 
   if (!window4)
     {
-      window4 = paned_keyboard_window4 ();
+      window4 = paned_keyboard_window4 (widget);
       gtk_signal_connect (GTK_OBJECT (window4), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window4);
@@ -8567,7 +8913,8 @@ static void
 shape_released (GtkWidget *widget)
 {
   gtk_grab_remove (widget);
-  gdk_pointer_ungrab (0);
+  gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
+                             GDK_CURRENT_TIME);
 }
 
 static void
@@ -8589,12 +8936,13 @@ shape_motion (GtkWidget      *widget,
 }
 
 GtkWidget *
-shape_create_icon (char     *xpm_file,
-                  gint      x,
-                  gint      y,
-                  gint      px,
-                  gint      py,
-                  gint      window_type)
+shape_create_icon (GdkScreen *screen,
+                  char      *xpm_file,
+                  gint       x,
+                  gint       y,
+                  gint       px,
+                  gint       py,
+                  gint       window_type)
 {
   GtkWidget *window;
   GtkWidget *pixmap;
@@ -8612,6 +8960,7 @@ shape_create_icon (char     *xpm_file,
    * GDK_WINDOW_TOPLEVEL works also, giving you a title border
    */
   window = gtk_window_new (window_type);
+  gtk_window_set_screen (GTK_WINDOW (window), screen);
   
   fixed = gtk_fixed_new ();
   gtk_widget_set_usize (fixed, 100,100);
@@ -8655,13 +9004,14 @@ shape_create_icon (char     *xpm_file,
 }
 
 void 
-create_shapes (void)
+create_shapes (GtkWidget *widget)
 {
   /* Variables used by the Drag/Drop and Shape Window demos */
   static GtkWidget *modeller = NULL;
   static GtkWidget *sheets = NULL;
   static GtkWidget *rings = NULL;
   static GtkWidget *with_region = NULL;
+  GdkScreen *screen = gtk_widget_get_screen (widget);
   
   if (!(file_exists ("Modeller.xpm") &&
        file_exists ("FilesQueue.xpm") &&
@@ -8671,7 +9021,7 @@ create_shapes (void)
 
   if (!modeller)
     {
-      modeller = shape_create_icon ("Modeller.xpm",
+      modeller = shape_create_icon (screen, "Modeller.xpm",
                                    440, 140, 0,0, GTK_WINDOW_POPUP);
 
       gtk_signal_connect (GTK_OBJECT (modeller), "destroy",
@@ -8683,7 +9033,7 @@ create_shapes (void)
 
   if (!sheets)
     {
-      sheets = shape_create_icon ("FilesQueue.xpm",
+      sheets = shape_create_icon (screen, "FilesQueue.xpm",
                                  580, 170, 0,0, GTK_WINDOW_POPUP);
 
       gtk_signal_connect (GTK_OBJECT (sheets), "destroy",
@@ -8696,7 +9046,7 @@ create_shapes (void)
 
   if (!rings)
     {
-      rings = shape_create_icon ("3DRings.xpm",
+      rings = shape_create_icon (screen, "3DRings.xpm",
                                 460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
 
       gtk_signal_connect (GTK_OBJECT (rings), "destroy",
@@ -8711,7 +9061,7 @@ create_shapes (void)
       GdkRegion *region;
       gint x, y;
       
-      with_region = shape_create_icon ("3DRings.xpm",
+      with_region = shape_create_icon (screen, "3DRings.xpm",
                                        460, 270, 25,25, GTK_WINDOW_TOPLEVEL);
 
       gtk_window_set_decorated (GTK_WINDOW (with_region), FALSE);
@@ -8756,7 +9106,7 @@ create_shapes (void)
  */
 
 void
-create_wmhints (void)
+create_wmhints (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *label;
@@ -8771,6 +9121,9 @@ create_wmhints (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+      
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -8974,7 +9327,7 @@ get_state_controls (GtkWidget *window)
 }
 
 void
-create_window_states (void)
+create_window_states (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *label;
@@ -8982,10 +9335,12 @@ create_window_states (void)
   GtkWidget *iconified;
   GtkWidget *normal;
   GtkWidget *controls;
-  
+
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -8997,6 +9352,10 @@ create_window_states (void)
       gtk_container_add (GTK_CONTAINER (window), box1);
 
       iconified = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (iconified),
+                            gtk_widget_get_screen (widget));
+      
       gtk_signal_connect_object (GTK_OBJECT (iconified), "destroy",
                                 GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                 GTK_OBJECT (window));
@@ -9006,6 +9365,10 @@ create_window_states (void)
       gtk_container_add (GTK_CONTAINER (iconified), controls);
       
       normal = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+
+      gtk_window_set_screen (GTK_WINDOW (normal),
+                            gtk_widget_get_screen (widget));
+      
       gtk_signal_connect_object (GTK_OBJECT (normal), "destroy",
                                 GTK_SIGNAL_FUNC(gtk_widget_destroy),
                                 GTK_OBJECT (window));
@@ -9232,24 +9595,25 @@ get_screen_corner (GtkWindow *window,
                    gint      *y)
 {
   int w, h;
+  GdkScreen * screen = gtk_window_get_screen (window);
   
   gtk_window_get_size (GTK_WINDOW (window), &w, &h);
 
   switch (gtk_window_get_gravity (window))
     {
     case GDK_GRAVITY_SOUTH_EAST:
-      *x = gdk_screen_width () - w;
-      *y = gdk_screen_height () - h;
+      *x = gdk_screen_get_width (screen) - w;
+      *y = gdk_screen_get_height (screen) - h;
       break;
 
     case GDK_GRAVITY_NORTH_EAST:
-      *x = gdk_screen_width () - w;
+      *x = gdk_screen_get_width (screen) - w;
       *y = 0;
       break;
 
     case GDK_GRAVITY_SOUTH_WEST:
       *x = 0;
-      *y = gdk_screen_height () - h;
+      *y = gdk_screen_get_height (screen) - h;
       break;
 
     case GDK_GRAVITY_NORTH_WEST:
@@ -9258,28 +9622,28 @@ get_screen_corner (GtkWindow *window,
       break;
       
     case GDK_GRAVITY_SOUTH:
-      *x = (gdk_screen_width () - w) / 2;
-      *y = gdk_screen_height () - h;
+      *x = (gdk_screen_get_width (screen) - w) / 2;
+      *y = gdk_screen_get_height (screen) - h;
       break;
 
     case GDK_GRAVITY_NORTH:
-      *x = (gdk_screen_width () - w) / 2;
+      *x = (gdk_screen_get_width (screen) - w) / 2;
       *y = 0;
       break;
 
     case GDK_GRAVITY_WEST:
       *x = 0;
-      *y = (gdk_screen_height () - h) / 2;
+      *y = (gdk_screen_get_height (screen) - h) / 2;
       break;
 
     case GDK_GRAVITY_EAST:
-      *x = gdk_screen_width () - w;
-      *y = (gdk_screen_height () - h) / 2;
+      *x = gdk_screen_get_width (screen) - w;
+      *y = (gdk_screen_get_height (screen) - h) / 2;
       break;
 
     case GDK_GRAVITY_CENTER:
-      *x = (gdk_screen_width () - w) / 2;
-      *y = (gdk_screen_height () - h) / 2;
+      *x = (gdk_screen_get_width (screen) - w) / 2;
+      *y = (gdk_screen_get_height (screen) - h) / 2;
       break;
 
     case GDK_GRAVITY_STATIC:
@@ -9321,6 +9685,9 @@ make_gravity_window (GtkWidget   *destroy_with,
   
   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+  gtk_window_set_screen (GTK_WINDOW (window),
+                        gtk_widget_get_screen (destroy_with));
+
   vbox = gtk_vbox_new (FALSE, 0);
   gtk_widget_show (vbox);
   
@@ -9440,6 +9807,9 @@ window_controls (GtkWidget *window)
   
   control_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+  gtk_window_set_screen (GTK_WINDOW (control_window),
+                        gtk_widget_get_screen (window));
+
   gtk_window_set_title (GTK_WINDOW (control_window), "Size controls");
   
   g_object_set_data (G_OBJECT (control_window),
@@ -9680,17 +10050,18 @@ window_controls (GtkWidget *window)
 }
 
 void
-create_window_sizing (void)
+create_window_sizing (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   static GtkWidget *target_window = NULL;
-  
+
   if (!target_window)
     {
       GtkWidget *label;
       
       target_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-
+      gtk_window_set_screen (GTK_WINDOW (target_window),
+                            gtk_widget_get_screen (widget));
       label = gtk_label_new (NULL);
       gtk_label_set_markup (GTK_LABEL (label), "<span foreground=\"purple\"><big>Window being resized</big></span>\nBlah blah blah blah\nblah blah blah\nblah blah blah blah blah");
       gtk_container_add (GTK_CONTAINER (target_window), label);
@@ -9882,7 +10253,7 @@ entry_changed (GtkWidget *widget, ProgressData *pdata)
 }
 
 void
-create_progress_bar (void)
+create_progress_bar (GtkWidget *widget)
 {
   GtkWidget *button;
   GtkWidget *vbox;
@@ -9909,7 +10280,7 @@ create_progress_bar (void)
     "Continuous",
     "Discrete"
   };
-
+  
   if (!pdata)
     pdata = g_new0 (ProgressData, 1);
 
@@ -9917,6 +10288,9 @@ create_progress_bar (void)
     {
       pdata->window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (pdata->window),
+                            gtk_widget_get_screen (widget));
+
       gtk_window_set_policy (GTK_WINDOW (pdata->window), FALSE, FALSE, TRUE);
 
       gtk_signal_connect (GTK_OBJECT (pdata->window), "destroy",
@@ -10232,14 +10606,14 @@ find_widget (GtkWidget *widget, FindWidgetData *data)
 }
 
 static GtkWidget *
-find_widget_at_pointer (void)
+find_widget_at_pointer (GdkScreen *screen)
 {
   GtkWidget *widget = NULL;
   GdkWindow *pointer_window;
   gint x, y;
   FindWidgetData data;
  
- pointer_window = gdk_window_at_pointer (NULL, NULL);
+ pointer_window = gdk_screen_get_window_at_pointer (screen, NULL, NULL);
  
  if (pointer_window)
    gdk_window_get_user_data (pointer_window, (gpointer*) &widget);
@@ -10307,11 +10681,16 @@ property_query_event (GtkWidget              *widget,
   if (event->type == GDK_BUTTON_RELEASE)
     {
       gtk_grab_remove (widget);
-      gdk_pointer_ungrab (GDK_CURRENT_TIME);
+      gdk_display_pointer_ungrab (gtk_widget_get_display (widget),
+                                 GDK_CURRENT_TIME);
       
-      res_widget = find_widget_at_pointer ();
+      res_widget = find_widget_at_pointer (gtk_widget_get_screen (widget));
       if (res_widget)
-       create_prop_editor (G_OBJECT (res_widget), 0);
+       {
+         g_object_set_data (G_OBJECT (res_widget), "prop-editor-screen",
+                            gtk_widget_get_screen (widget));
+         create_prop_editor (G_OBJECT (res_widget), 0);
+       }
 
       data->in_query = FALSE;
     }
@@ -10330,7 +10709,8 @@ query_properties (GtkButton *button,
 
 
   if (!data->cursor)
-    data->cursor = gdk_cursor_new (GDK_TARGET);
+    data->cursor = gdk_cursor_new_for_screen (gtk_widget_get_screen (GTK_WIDGET (button)),
+                                             GDK_TARGET);
   
   failure = gdk_pointer_grab (GTK_WIDGET (button)->window,
                              TRUE,
@@ -10345,7 +10725,7 @@ query_properties (GtkButton *button,
 }
 
 static void
-create_properties (void)
+create_properties (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -10363,6 +10743,9 @@ create_properties (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));      
+
       data->handler = gtk_signal_connect (GTK_OBJECT (window), "destroy",
                                          GTK_SIGNAL_FUNC(destroy_properties),
                                          data);
@@ -10435,7 +10818,7 @@ color_preview_destroy (GtkWidget  *widget,
 }
 
 void
-create_color_preview (void)
+create_color_preview (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *preview;
@@ -10444,9 +10827,10 @@ create_color_preview (void)
 
   if (!window)
     {
-      gtk_widget_push_colormap (gdk_rgb_get_cmap ());
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-      gtk_widget_pop_colormap ();
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(color_preview_destroy),
@@ -10520,7 +10904,7 @@ gray_preview_destroy (GtkWidget  *widget,
 }
 
 void
-create_gray_preview (void)
+create_gray_preview (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *preview;
@@ -10531,6 +10915,9 @@ create_gray_preview (void)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gray_preview_destroy),
                          &window);
@@ -10627,7 +11014,7 @@ selection_test_get_targets (GtkWidget *widget, GtkWidget *list)
 }
 
 void
-create_selection_test (void)
+create_selection_test (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -10639,6 +11026,9 @@ create_selection_test (void)
   if (!window)
     {
       window = gtk_dialog_new ();
+      
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
@@ -10698,17 +11088,20 @@ create_selection_test (void)
  */
 
 void
-create_gamma_curve (void)
+create_gamma_curve (GtkWidget *widget)
 {
   static GtkWidget *window = NULL, *curve;
   static int count = 0;
   gfloat vec[256];
   gint max;
   gint i;
-
+  
   if (!window)
     {
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_window_set_title (GTK_WINDOW (window), "test");
       gtk_container_set_border_width (GTK_CONTAINER (window), 10);
 
@@ -10814,7 +11207,7 @@ scroll_test_adjustment_changed (GtkAdjustment *adj, GtkWidget *widget)
 
 
 void
-create_scroll_test (void)
+create_scroll_test (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *hbox;
@@ -10824,11 +11217,14 @@ create_scroll_test (void)
   GtkAdjustment *adj;
   GdkGeometry geometry;
   GdkWindowHints geometry_mask;
-  
+
   if (!window)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -10949,7 +11345,7 @@ destroy_timeout_test (GtkWidget  *widget,
 }
 
 void
-create_timeout_test (void)
+create_timeout_test (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -10959,6 +11355,9 @@ create_timeout_test (void)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(destroy_timeout_test),
                          &window);
@@ -11063,7 +11462,7 @@ toggle_idle_container (GtkObject *button,
 }
 
 static void
-create_idle_test (void)
+create_idle_test (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -11078,6 +11477,9 @@ create_idle_test (void)
 
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(destroy_idle_test),
                          &window);
@@ -11203,7 +11605,7 @@ reload_all_rc_files (void)
 }
 
 void
-create_rc_file (void)
+create_rc_file (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *button;
@@ -11215,6 +11617,9 @@ create_rc_file (void)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(destroy_idle_test),
                          &window);
@@ -11282,7 +11687,7 @@ mainloop_destroyed (GtkWidget *w, GtkWidget **window)
 }
 
 void
-create_mainloop (void)
+create_mainloop (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *label;
@@ -11292,6 +11697,9 @@ create_mainloop (void)
     {
       window = gtk_dialog_new ();
 
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_window_set_title (GTK_WINDOW (window), "Test Main Loop");
 
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
@@ -11362,7 +11770,7 @@ layout_expose_handler (GtkWidget *widget, GdkEventExpose *event)
   return FALSE;
 }
 
-void create_layout (void)
+void create_layout (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *layout;
@@ -11376,6 +11784,9 @@ void create_layout (void)
       gint i, j;
       
       window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -11439,7 +11850,7 @@ void create_layout (void)
 }
 
 void
-create_styles (void)
+create_styles (GtkWidget *widget)
 {
   static GtkWidget *window = NULL;
   GtkWidget *label;
@@ -11458,6 +11869,9 @@ create_styles (void)
   if (!window)
     {
       window = gtk_dialog_new ();
+      gtk_window_set_screen (GTK_WINDOW (window),
+                            gtk_widget_get_screen (widget));
+     
       gtk_signal_connect (GTK_OBJECT (window), "destroy",
                          GTK_SIGNAL_FUNC(gtk_widget_destroyed),
                          &window);
@@ -11581,6 +11995,7 @@ struct {
   { "ctree", create_ctree },
   { "cursors", create_cursors },
   { "dialog", create_dialog },
+  { "display & screen", create_display_screen },
   { "entry", create_entry },
   { "event watcher", create_event_watcher },
   { "file selection", create_file_selection },