]> Pileus Git - ~andy/gtk/blobdiff - gtk/testgtk.c
new function to get the *real* geometry position of a window, taken
[~andy/gtk] / gtk / testgtk.c
index f101c15a7ad61fa37f29d57e8a5a916ec1a0bcb3..1c8e9ed3765fa9291a78daaf488e93ca6f6f52a7 100644 (file)
@@ -1712,6 +1712,120 @@ create_reparent (void)
     gtk_widget_destroy (window);
 }
 
+/*
+ * Saved Position
+ */
+gint upositionx = 0;
+gint upositiony = 0;
+
+static gint
+uposition_configure (GtkWidget *window)
+{
+  GtkLabel *lx;
+  GtkLabel *ly;
+  gchar buffer[64];
+
+  lx = gtk_object_get_data (GTK_OBJECT (window), "x");
+  ly = gtk_object_get_data (GTK_OBJECT (window), "y");
+
+  gdk_window_get_root_origin (window->window, &upositionx, &upositiony);
+  sprintf (buffer, "%d", upositionx);
+  gtk_label_set (lx, buffer);
+  sprintf (buffer, "%d", upositiony);
+  gtk_label_set (ly, buffer);
+
+  return FALSE;
+}
+
+static void
+create_saved_position (void)
+{
+  static GtkWidget *window = NULL;
+
+  if (!window)
+    {
+      GtkWidget *hbox;
+      GtkWidget *main_vbox;
+      GtkWidget *vbox;
+      GtkWidget *x_label;
+      GtkWidget *y_label;
+      GtkWidget *button;
+      GtkWidget *label;
+      GtkWidget *any;
+
+      window = gtk_widget_new (GTK_TYPE_WINDOW,
+                              "type", GTK_WINDOW_TOPLEVEL,
+                              "signal::configure_event", uposition_configure, NULL,
+                              "x", upositionx,
+                              "y", upositiony,
+                              "title", "Saved Position",
+                              NULL);
+
+      gtk_signal_connect (GTK_OBJECT (window), "destroy",
+                         GTK_SIGNAL_FUNC (gtk_widget_destroyed),
+                         &window);
+
+      main_vbox = gtk_vbox_new (FALSE, 5);
+      gtk_container_border_width (GTK_CONTAINER (main_vbox), 0);
+      gtk_container_add (GTK_CONTAINER (window), main_vbox);
+
+      vbox =
+       gtk_widget_new (gtk_vbox_get_type (),
+                       "GtkBox::homogeneous", FALSE,
+                       "GtkBox::spacing", 5,
+                       "GtkContainer::border_width", 10,
+                       "GtkWidget::parent", main_vbox,
+                       "GtkWidget::visible", TRUE,
+                       NULL);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_border_width (GTK_CONTAINER (hbox), 5);
+      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+      label = gtk_label_new ("X Origin : ");
+      gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+      x_label = gtk_label_new ("");
+      gtk_box_pack_start (GTK_BOX (hbox), x_label, TRUE, TRUE, 0);
+      gtk_object_set_data (GTK_OBJECT (window), "x", x_label);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_border_width (GTK_CONTAINER (hbox), 5);
+      gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0);
+
+      label = gtk_label_new ("Y Origin : ");
+      gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
+      gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, TRUE, 0);
+
+      y_label = gtk_label_new ("");
+      gtk_box_pack_start (GTK_BOX (hbox), y_label, TRUE, TRUE, 0);
+      gtk_object_set_data (GTK_OBJECT (window), "y", y_label);
+
+      any =
+       gtk_widget_new (gtk_hseparator_get_type (),
+                       "GtkWidget::visible", TRUE,
+                       NULL);
+      gtk_box_pack_start (GTK_BOX (main_vbox), any, FALSE, TRUE, 0);
+
+      hbox = gtk_hbox_new (FALSE, 0);
+      gtk_container_border_width (GTK_CONTAINER (hbox), 10);
+      gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, TRUE, 0);
+
+      button = gtk_button_new_with_label ("Close");
+      gtk_signal_connect_object (GTK_OBJECT (button), "clicked",
+                                GTK_SIGNAL_FUNC (gtk_widget_destroy),
+                                GTK_OBJECT (window));
+      gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 5);
+      GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT);
+      gtk_widget_grab_default (button);
+      
+      gtk_widget_show_all (window);
+    }
+  else
+    gtk_widget_destroy (window);
+}
+
 /*
  * GtkPixmap
  */
@@ -7621,6 +7735,7 @@ create_main_window (void)
       { "rc file", create_rc_file },
       { "reparent", create_reparent },
       { "rulers", create_rulers },
+      { "saved position", create_saved_position },
       { "scrolled windows", create_scrolled_windows },
       { "shapes", create_shapes },
       { "spinbutton", create_spins },