summaryrefslogtreecommitdiff
path: root/gui/simple-greeter/gdm-layout-chooser-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'gui/simple-greeter/gdm-layout-chooser-dialog.c')
-rw-r--r--gui/simple-greeter/gdm-layout-chooser-dialog.c83
1 files changed, 67 insertions, 16 deletions
diff --git a/gui/simple-greeter/gdm-layout-chooser-dialog.c b/gui/simple-greeter/gdm-layout-chooser-dialog.c
index eb5bdc6b..41c293cb 100644
--- a/gui/simple-greeter/gdm-layout-chooser-dialog.c
+++ b/gui/simple-greeter/gdm-layout-chooser-dialog.c
@@ -72,28 +72,79 @@ gdm_layout_chooser_dialog_set_current_layout_name (GdmLayoutChooserDialog *dialo
}
static void
-gdm_layout_chooser_dialog_size_request (GtkWidget *widget,
- GtkRequisition *requisition)
+gdm_layout_chooser_dialog_get_preferred_width (GtkWidget *widget,
+ gint *minimum_size,
+ gint *natural_size)
{
- int screen_w;
- int screen_h;
- GtkRequisition child_requisition;
+ GtkWidget *child;
+ int min_size, nat_size;
+ int screen_w;
- if (GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->size_request) {
- GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->size_request (widget, requisition);
+ /* FIXME: this should use monitor size */
+ screen_w = gdk_screen_get_width (gtk_widget_get_screen (widget));
+
+ child = gtk_bin_get_child (GTK_BIN (widget));
+
+ min_size = 0;
+ nat_size = 0;
+
+ if (GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->get_preferred_width) {
+ GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->get_preferred_width (widget, &min_size, &nat_size);
}
- screen_w = gdk_screen_get_width (gtk_widget_get_screen (widget));
+ if (child && gtk_widget_get_visible (child)) {
+ gtk_widget_get_preferred_width (child,
+ &min_size,
+ &nat_size);
+ }
+
+ min_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
+ min_size = MIN (min_size, .50 * screen_w);
+ nat_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
+ nat_size = MIN (nat_size, .50 * screen_w);
+
+ if (minimum_size)
+ *minimum_size = min_size;
+ if (natural_size)
+ *natural_size = nat_size;
+}
+
+static void
+gdm_layout_chooser_dialog_get_preferred_height (GtkWidget *widget,
+ gint *minimum_size,
+ gint *natural_size)
+{
+ GtkWidget *child;
+ int min_size, nat_size;
+ int screen_h;
+
+ /* FIXME: this should use monitor size */
screen_h = gdk_screen_get_height (gtk_widget_get_screen (widget));
- gtk_widget_get_child_requisition (gtk_bin_get_child (GTK_BIN (widget)), &child_requisition);
- *requisition = child_requisition;
+ child = gtk_bin_get_child (GTK_BIN (widget));
+
+ min_size = 0;
+ nat_size = 0;
+
+ if (GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->get_preferred_height) {
+ GTK_WIDGET_CLASS (gdm_layout_chooser_dialog_parent_class)->get_preferred_height (widget, &min_size, &nat_size);
+ }
+
+ if (child && gtk_widget_get_visible (child)) {
+ gtk_widget_get_preferred_height (child,
+ &min_size,
+ &nat_size);
+ }
- requisition->width += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
- requisition->height += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
+ min_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
+ min_size = MIN (min_size, .50 * screen_h);
+ nat_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget));
+ nat_size = MIN (nat_size, .50 * screen_h);
- requisition->width = MIN (requisition->width, .50 * screen_w);
- requisition->height = MIN (requisition->height, .80 * screen_h);
+ if (minimum_size)
+ *minimum_size = min_size;
+ if (natural_size)
+ *natural_size = nat_size;
}
static void
@@ -115,7 +166,8 @@ gdm_layout_chooser_dialog_class_init (GdmLayoutChooserDialogClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = gdm_layout_chooser_dialog_finalize;
- widget_class->size_request = gdm_layout_chooser_dialog_size_request;
+ widget_class->get_preferred_width = gdm_layout_chooser_dialog_get_preferred_width;
+ widget_class->get_preferred_height = gdm_layout_chooser_dialog_get_preferred_height;
widget_class->realize = gdm_layout_chooser_dialog_realize;
g_type_class_add_private (klass, sizeof (GdmLayoutChooserDialogPrivate));
@@ -158,7 +210,6 @@ gdm_layout_chooser_dialog_init (GdmLayoutChooserDialog *dialog)
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL);
- gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
gtk_container_set_border_width (GTK_CONTAINER (dialog), 12);
gtk_container_set_border_width (GTK_CONTAINER (dialog->priv->chooser_widget), 5);
gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS);