diff --git a/src/simply/simply_menu.c b/src/simply/simply_menu.c index 94462486..cfe825e4 100644 --- a/src/simply/simply_menu.c +++ b/src/simply/simply_menu.c @@ -383,10 +383,10 @@ static void window_appear(Window *window) { static void window_disappear(Window *window) { SimplyMenu *self = window_get_user_data(window); - simply_window_disappear(&self->window); - - simply_res_clear(self->window.simply->res); - simply_menu_clear(self); + if (simply_window_disappear(&self->window)) { + simply_res_clear(self->window.simply->res); + simply_menu_clear(self); + } } static void window_unload(Window *window) { diff --git a/src/simply/simply_stage.c b/src/simply/simply_stage.c index c79ef15f..b2beb4a5 100644 --- a/src/simply/simply_stage.c +++ b/src/simply/simply_stage.c @@ -447,10 +447,10 @@ static void window_appear(Window *window) { static void window_disappear(Window *window) { SimplyStage *self = window_get_user_data(window); - simply_window_disappear(&self->window); - - simply_res_clear(self->window.simply->res); - simply_stage_clear(self); + if (simply_window_disappear(&self->window)) { + simply_res_clear(self->window.simply->res); + simply_stage_clear(self); + } } static void window_unload(Window *window) { diff --git a/src/simply/simply_ui.c b/src/simply/simply_ui.c index 5d365c49..f7b8cce3 100644 --- a/src/simply/simply_ui.c +++ b/src/simply/simply_ui.c @@ -317,9 +317,9 @@ static void window_appear(Window *window) { static void window_disappear(Window *window) { SimplyUi *self = window_get_user_data(window); - simply_window_disappear(&self->window); - - simply_res_clear(self->window.simply->res); + if (simply_window_disappear(&self->window)) { + simply_res_clear(self->window.simply->res); + } } static void window_unload(Window *window) { diff --git a/src/simply/simply_window.c b/src/simply/simply_window.c index 03d4362f..5b5f27f3 100644 --- a/src/simply/simply_window.c +++ b/src/simply/simply_window.c @@ -107,15 +107,18 @@ void simply_window_set_scrollable(SimplyWindow *self, bool is_scrollable) { } void simply_window_set_fullscreen(SimplyWindow *self, bool is_fullscreen) { + bool changed = false; if (is_fullscreen && self->is_status_bar) { status_bar_layer_remove_from_window(self->window, self->status_bar_layer); self->is_status_bar = false; + changed = true; } else if (!is_fullscreen && !self->is_status_bar) { status_bar_layer_add_to_window(self->window, self->status_bar_layer); self->is_status_bar = true; + changed = true; } - if (!self->layer) { + if (!changed || !self->layer) { return; } @@ -267,16 +270,25 @@ void simply_window_load(SimplyWindow *self) { simply_window_set_action_bar(self, self->is_action_bar); } -void simply_window_appear(SimplyWindow *self) { +bool simply_window_appear(SimplyWindow *self) { + if (!self->id) { + return false; + } simply_window_stack_send_show(self->simply->window_stack, self); + return true; } -void simply_window_disappear(SimplyWindow *self) { +bool simply_window_disappear(SimplyWindow *self) { + if (!self->id) { + return false; + } simply_window_stack_send_hide(self->simply->window_stack, self); #ifdef PBL_PLATFORM_BASALT simply_window_set_fullscreen(self, true); #endif + + return true; } void simply_window_unload(SimplyWindow *self) { diff --git a/src/simply/simply_window.h b/src/simply/simply_window.h index 83950005..ca41fb93 100644 --- a/src/simply/simply_window.h +++ b/src/simply/simply_window.h @@ -34,8 +34,8 @@ void simply_window_hide(SimplyWindow *self); void simply_window_load(SimplyWindow *self); void simply_window_unload(SimplyWindow *self); -void simply_window_appear(SimplyWindow *self); -void simply_window_disappear(SimplyWindow *self); +bool simply_window_appear(SimplyWindow *self); +bool simply_window_disappear(SimplyWindow *self); void simply_window_single_click_handler(ClickRecognizerRef recognizer, void *context);