ecore_evas_x - fix maximize/unmaximize request corner case

state was not managed well.. this will fix that. also a test in
elementary for it to you can test it out.

@fix
This commit is contained in:
Carsten Haitzler 2020-05-03 15:34:42 +01:00
parent 09df69a3eb
commit bf2538897b
2 changed files with 46 additions and 11 deletions

View File

@ -226,6 +226,22 @@ _bt_win_center_cb(void *data, Evas_Object *obj EINA_UNUSED,
elm_win_center(data, EINA_TRUE, EINA_TRUE);
}
static void
_bt_win_maximize(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
printf("Maximize\n");
elm_win_maximized_set(data, EINA_TRUE);
}
static void
_bt_win_unmaximize(void *data, Evas_Object *obj EINA_UNUSED,
void *event_info EINA_UNUSED)
{
printf("Unmaximize\n");
elm_win_maximized_set(data, EINA_FALSE);
}
static void
_win_state_print_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
@ -414,7 +430,7 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
evas_object_show(bt);
bt = elm_button_add(win);
elm_object_text_set(bt, "Iconify and Activate");
elm_object_text_set(bt, "Iconify + Act");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_iconify_and_activate, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -423,7 +439,7 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
evas_object_show(bt);
bt = elm_button_add(bx2);
elm_object_text_set(bt, "Iconify and Deiconify");
elm_object_text_set(bt, "Iconify + De");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_iconify_and_deiconify, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
@ -431,6 +447,24 @@ test_win_state(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(bx2);
elm_object_text_set(bt, "Maximize");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_maximize, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(bx2);
elm_object_text_set(bt, "Unmaximize");
evas_object_smart_callback_add(bt, "clicked",
_bt_win_unmaximize, win);
evas_object_size_hint_fill_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
elm_box_pack_end(bx2, bt);
evas_object_show(bt);
bt = elm_button_add(win);
elm_object_text_set(bt, "Center");
evas_object_smart_callback_add(bt, "clicked",

View File

@ -3303,21 +3303,22 @@ _ecore_evas_x_maximized_set(Ecore_Evas *ee, Eina_Bool on)
{
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
if (ee->prop.maximized == on) return;
ee->prop.maximized = 1;
edata->state.maximized_h = 1;
edata->state.maximized_v = 1;
// ee->prop.maximized = on;
if (ee->should_be_visible)
{
ecore_x_netwm_state_request_send(ee->prop.window, edata->win_root,
ECORE_X_WINDOW_STATE_MAXIMIZED_VERT, -1, on);
ecore_x_netwm_state_request_send(ee->prop.window, edata->win_root,
ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ, -1, on);
ECORE_X_WINDOW_STATE_MAXIMIZED_VERT,
ECORE_X_WINDOW_STATE_MAXIMIZED_HORZ,
on);
}
else
{
if (ee->prop.maximized == on) return;
ee->prop.maximized = on;
edata->state.maximized_h = on;
edata->state.maximized_v = on;
_ecore_evas_x_state_update(ee);
}
}
static void
_ecore_evas_x_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)