- GtkWidget *close_button = gtk_button_new_with_label( "x" );
-
- gtk_myfixed_put( GTK_MYFIXED(m_mainWidget), close_button, 4, 4 );
- gtk_widget_set_usize( close_button, 12, 11 );
-
- gtk_widget_show( close_button );
-
- gtk_signal_connect( GTK_OBJECT(close_button), "clicked",
- GTK_SIGNAL_FUNC(gtk_button_clicked_callback), (gpointer*)this );
-
+ // Use a GtkEventBox for the title and borders. Using m_widget for this
+ // almost works, except that setting the resize cursor has no effect.
+ GtkWidget* eventbox = gtk_event_box_new();
+ gtk_widget_add_events(eventbox,
+ GDK_POINTER_MOTION_MASK |
+ GDK_POINTER_MOTION_HINT_MASK);
+ gtk_widget_show(eventbox);
+ // Use a GtkAlignment to position m_mainWidget inside the decorations
+ GtkWidget* alignment = gtk_alignment_new(0, 0, 1, 1);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
+ m_miniTitle + m_miniEdge, m_miniEdge, m_miniEdge, m_miniEdge);
+ gtk_widget_show(alignment);
+ // The GtkEventBox and GtkAlignment go between m_widget and m_mainWidget
+ gtk_widget_reparent(m_mainWidget, alignment);
+ gtk_container_add(GTK_CONTAINER(eventbox), alignment);
+ gtk_container_add(GTK_CONTAINER(m_widget), eventbox);
+
+ m_gdkDecor = 0;
+ m_gdkFunc = 0;
+ if (style & wxRESIZE_BORDER)
+ m_gdkFunc = GDK_FUNC_RESIZE;
+
+ // don't allow sizing smaller than decorations
+ GdkGeometry geom;
+ geom.min_width = 2 * m_miniEdge;
+ geom.min_height = 2 * m_miniEdge + m_miniTitle;
+ gtk_window_set_geometry_hints(GTK_WINDOW(m_widget), NULL, &geom, GDK_HINT_MIN_SIZE);
+
+ if (m_parent && (GTK_IS_WINDOW(m_parent->m_widget)))
+ {
+ gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+ }
+
+ if (m_miniTitle && (style & wxCLOSE_BOX))
+ {
+ wxImage img = wxBitmap((const char*)close_bits, 16, 16).ConvertToImage();
+ img.Replace(0,0,0,123,123,123);
+ img.SetMaskColour(123,123,123);
+ m_closeButton = wxBitmap( img );
+ }
+