raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=25e64a9a4e3adc259e81093a223c12996e424bf1

commit 25e64a9a4e3adc259e81093a223c12996e424bf1
Author: Vincent Torri <vincent.to...@gmail.com>
Date:   Tue Oct 13 15:19:39 2020 +0100

    Ecore_Win32: add the API ecore_win32_window_maximized_set()
    
    Summary:
    ecore_evas win32 engine is updated to support it. This fixes the
    "maximized/unmaximized" elm "windows states" test.
    
    Test Plan: elm_test
    
    Reviewers: raster, jptiz, felipealmeida
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D12177
---
 src/lib/ecore_win32/Ecore_Win32.h                  |  2 +
 src/lib/ecore_win32/ecore_win32_private.h          |  1 +
 src/lib/ecore_win32/ecore_win32_window.c           | 35 ++++++++++++++++-
 .../ecore_evas/engines/win32/ecore_evas_win32.c    | 45 ++++++++++++++++++++--
 4 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/src/lib/ecore_win32/Ecore_Win32.h 
b/src/lib/ecore_win32/Ecore_Win32.h
index fa5b80eb48..bb26a352d6 100644
--- a/src/lib/ecore_win32/Ecore_Win32.h
+++ b/src/lib/ecore_win32/Ecore_Win32.h
@@ -625,6 +625,8 @@ EAPI void 
ecore_win32_window_iconified_set(Ecore_Win32_Window *window,
 
 EAPI void ecore_win32_window_borderless_set(Ecore_Win32_Window *window,
                                             Eina_Bool           on);
+EAPI void ecore_win32_window_maximized_set(Ecore_Win32_Window *window,
+                                           Eina_Bool           on);
 
 EAPI void ecore_win32_window_fullscreen_set(Ecore_Win32_Window *window,
                                             Eina_Bool           on);
diff --git a/src/lib/ecore_win32/ecore_win32_private.h 
b/src/lib/ecore_win32/ecore_win32_private.h
index 88d0e12afb..64304bb606 100644
--- a/src/lib/ecore_win32/ecore_win32_private.h
+++ b/src/lib/ecore_win32/ecore_win32_private.h
@@ -104,6 +104,7 @@ struct _Ecore_Win32_Window
    unsigned int pointer_is_in : 1;
    unsigned int borderless    : 1;
    unsigned int iconified     : 1;
+   unsigned int maximized     : 1;
    unsigned int fullscreen    : 1;
 
    struct {
diff --git a/src/lib/ecore_win32/ecore_win32_window.c 
b/src/lib/ecore_win32/ecore_win32_window.c
index 2199d4a6df..914e0cf9ce 100644
--- a/src/lib/ecore_win32/ecore_win32_window.c
+++ b/src/lib/ecore_win32/ecore_win32_window.c
@@ -146,6 +146,7 @@ _ecore_win32_window_internal_new(Ecore_Win32_Window *parent,
    w->pointer_is_in = 0;
    w->borderless    = 0;
    w->iconified     = 0;
+   w->maximized     = 0;
    w->fullscreen    = 0;
 
    w->drag.x = x;
@@ -1359,6 +1360,37 @@ ecore_win32_window_borderless_set(Ecore_Win32_Window 
*window,
    window->borderless = on;
 }
 
+/**
+ * @brief Maximize or restore the given window.
+ *
+ * @param window The window.
+ * @param on @c EINA_TRUE for maximized window, @c EINA_FALSE to
+ * restore it.
+ *
+ * This function maximizes @p window if @p on is set
+ * to @c EINA_TRUE, or restores the window if it is set to
+ * @c EINA_FALSE. If @p window is @c NULL or if the state
+ * does not change (like setting to fullscreenmaximized the window is already
+ * maximized), this function does nothing.
+ *
+ * @since 1.26
+ */
+EAPI void
+ecore_win32_window_maximized_set(Ecore_Win32_Window *window,
+                                 Eina_Bool           on)
+{
+   if (!window) return;
+
+   if (((window->maximized) && (on)) ||
+       ((!window->maximized) && (!on)))
+     return;
+
+   INF("maximizing window: %s", on ? "yes" : "no");
+
+   ShowWindow(window->window, on ? SW_MAXIMIZE : SW_RESTORE);
+   window->maximized = on;
+}
+
 /**
  * @brief Set the given window to fullscreen.
  *
@@ -1525,8 +1557,7 @@ ecore_win32_window_state_set(Ecore_Win32_Window       
*window,
             window->state.maximized_horz = 1;
             break;
           case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
-            window->state.maximized_horz = 1;
-            window->state.maximized_vert = 1;
+            window->state.maximized = 1;
             break;
           case ECORE_WIN32_WINDOW_STATE_SHADED:
             window->state.shaded = 1;
diff --git a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c 
b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
index b159779940..623515da95 100644
--- a/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
+++ b/src/modules/ecore_evas/engines/win32/ecore_evas_win32.c
@@ -73,6 +73,7 @@ struct _Ecore_Evas_Engine_Data_Win32
    {
       unsigned char region     : 1;
       unsigned char fullscreen : 1;
+      unsigned char maximized  : 1;
    } state;
 };
 
@@ -434,9 +435,11 @@ _ecore_evas_win32_event_window_property_change(void *data 
EINA_UNUSED, int type
 {
    struct {
       struct {
+         unsigned char maximized : 1;
          unsigned char fullscreen : 1;
       } win32;
       struct {
+         Eina_Bool maximized : 1;
          Eina_Bool fullscreen : 1;
       } prop;
    } prev;
@@ -456,12 +459,16 @@ _ecore_evas_win32_event_window_property_change(void *data 
EINA_UNUSED, int type
    wdata = ee->engine.data;
 
    prev.win32.fullscreen = wdata->state.fullscreen;
+   prev.win32.maximized = wdata->state.maximized;
 
    prev.prop.fullscreen = ee->prop.fullscreen;
+   prev.prop.maximized = ee->prop.maximized;
 
    wdata->state.fullscreen = 0;
+   wdata->state.maximized = 0;
 
    ee->prop.fullscreen = EINA_FALSE;
+   ee->prop.maximized = EINA_FALSE;
 
    /* we get the states status */
    ecore_win32_window_state_get(e->window, &state, &num);
@@ -475,6 +482,10 @@ _ecore_evas_win32_event_window_property_change(void *data 
EINA_UNUSED, int type
                    ee->prop.fullscreen = 1;
                    wdata->state.fullscreen = 1;
                    break;
+                case ECORE_WIN32_WINDOW_STATE_MAXIMIZED:
+                   ee->prop.maximized = 1;
+                   wdata->state.maximized = 1;
+                   break;
                 default:
                    break;
                }
@@ -483,7 +494,9 @@ _ecore_evas_win32_event_window_property_change(void *data 
EINA_UNUSED, int type
      }
 
    if ((prev.win32.fullscreen != wdata->state.fullscreen) ||
-       (prev.prop.fullscreen != ee->prop.fullscreen))
+       (prev.prop.fullscreen != ee->prop.fullscreen) ||
+       (prev.win32.maximized != wdata->state.maximized) ||
+       (prev.prop.maximized != ee->prop.maximized))
      {
         if (ee->func.fn_state_change)
           ee->func.fn_state_change(ee);
@@ -508,6 +521,8 @@ _ecore_evas_win32_state_update(Ecore_Evas *ee)
      state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED_VERT;
    if (ee->prop.maximized)
      state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED_HORZ;
+   if (ee->prop.maximized)
+     state[num++] = ECORE_WIN32_WINDOW_STATE_MAXIMIZED;
 //   if (bd->client.netwm.state.shaded)
 //     state[num++] = ECORE_WIN32_WINDOW_STATE_SHADED;
    /* if (ee->prop.focus_skip) */
@@ -832,7 +847,7 @@ _ecore_evas_win32_activate(Ecore_Evas *ee)
    INF("ecore evas activate");
 
    ecore_evas_show(ee);
-   ecore_win32_window_activate(ee->prop.window);
+   ecore_win32_window_activate((Ecore_Win32_Window *)ee->prop.window);
 }
 
 static void
@@ -974,6 +989,30 @@ _ecore_evas_win32_override_set(Ecore_Evas *ee, Eina_Bool 
on)
    ee->prop.override = on;
 }
 
+static void
+_ecore_evas_win32_maximized_set(Ecore_Evas *ee, Eina_Bool on)
+{
+   Ecore_Evas_Engine_Data_Win32 *wdata = ee->engine.data;
+
+   INF("ecore evas maximized set");
+
+   wdata->state.maximized = !!on;
+   if (ee->should_be_visible)
+     {
+        struct _Ecore_Win32_Window *window;
+
+        window = (Ecore_Win32_Window *)ee->prop.window;
+        ecore_win32_window_maximized_set(window, on);
+     }
+   else
+     {
+        if (ee->prop.maximized == on) return;
+        ee->prop.maximized = on;
+        wdata->state.maximized = on;
+        _ecore_evas_win32_state_update(ee);
+     }
+}
+
 static void
 _ecore_evas_win32_fullscreen_set(Ecore_Evas *ee, Eina_Bool on)
 {
@@ -1373,7 +1412,7 @@ static Ecore_Evas_Engine_Func _ecore_win32_engine_func =
    _ecore_evas_win32_iconified_set,
    _ecore_evas_win32_borderless_set,
    _ecore_evas_win32_override_set,
-   NULL, /* _ecore_evas_x_maximize_set */
+   _ecore_evas_win32_maximized_set,
    _ecore_evas_win32_fullscreen_set,
    NULL, /* _ecore_evas_x_avoid_damage_set */
    NULL, /* _ecore_evas_x_withdrawn_set */

-- 


Reply via email to