diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c index 0b17ed05d4..48329d4018 100644 --- a/demos/widget-factory/widget-factory.c +++ b/demos/widget-factory/widget-factory.c @@ -1896,6 +1896,48 @@ validate_more_details (GtkEntry *entry, } } +static gboolean +mode_switch_state_set (GtkSwitch *sw, gboolean state) +{ + GtkWidget *dialog = gtk_widget_get_ancestor (GTK_WIDGET (sw), GTK_TYPE_DIALOG); + GtkWidget *scale = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), "level_scale")); + GtkWidget *label = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), "error_label")); + + if (!state || + (gtk_range_get_value (GTK_RANGE (scale)) > 50)) + { + gtk_widget_hide (label); + gtk_switch_set_state (sw, state); + } + else + { + gtk_widget_show (label); + } + + return TRUE; +} + +static void +level_scale_value_changed (GtkRange *range) +{ + GtkWidget *dialog = gtk_widget_get_ancestor (GTK_WIDGET (range), GTK_TYPE_DIALOG); + GtkWidget *sw = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), "mode_switch")); + GtkWidget *label = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), "error_label")); + + if (gtk_switch_get_active (GTK_SWITCH (sw)) && + !gtk_switch_get_state (GTK_SWITCH (sw)) && + (gtk_range_get_value (range) > 50)) + { + gtk_widget_hide (label); + gtk_switch_set_state (GTK_SWITCH (sw), TRUE); + } + else if (gtk_switch_get_state (GTK_SWITCH (sw)) && + (gtk_range_get_value (range) <= 50)) + { + gtk_switch_set_state (GTK_SWITCH (sw), FALSE); + } +} + static void activate (GApplication *app) { @@ -1978,6 +2020,8 @@ activate (GApplication *app) "osd_frame_pressed", (GCallback)osd_frame_pressed, "age_entry_changed", (GCallback)age_entry_changed, "validate_more_details", (GCallback)validate_more_details, + "mode_switch_state_set", (GCallback)mode_switch_state_set, + "level_scale_value_changed", (GCallback)level_scale_value_changed, NULL); gtk_builder_set_scope (builder, scope); g_object_unref (scope); @@ -2101,6 +2145,13 @@ activate (GApplication *app) widget = (GtkWidget *)gtk_builder_get_object (builder, "circular_button"); g_signal_connect (widget, "clicked", G_CALLBACK (show_dialog), dialog); + widget = (GtkWidget *)gtk_builder_get_object (builder, "level_scale"); + g_object_set_data (G_OBJECT (dialog), "level_scale", widget); + widget = (GtkWidget *)gtk_builder_get_object (builder, "mode_switch"); + g_object_set_data (G_OBJECT (dialog), "mode_switch", widget); + widget = (GtkWidget *)gtk_builder_get_object (builder, "error_label"); + g_object_set_data (G_OBJECT (dialog), "error_label", widget); + dialog = (GtkWidget *)gtk_builder_get_object (builder, "selection_dialog"); g_object_set_data (G_OBJECT (window), "selection_dialog", dialog); widget = (GtkWidget *)gtk_builder_get_object (builder, "text3"); diff --git a/demos/widget-factory/widget-factory.ui b/demos/widget-factory/widget-factory.ui index fccbb520d9..b77fa7b2ca 100644 --- a/demos/widget-factory/widget-factory.ui +++ b/demos/widget-factory/widget-factory.ui @@ -3078,6 +3078,7 @@ bad things might happen. baseline 0 adjustment1 + 1 2 @@ -3105,6 +3106,7 @@ bad things might happen. start baseline + 1 3 @@ -3112,12 +3114,11 @@ bad things might happen. - + 0 start baseline - Error! - + Level too low