forked from enlightenment/efl
win: Fix maximized geometry with CSD in X
There is still a geometry issue after un-maximizing.
This commit is contained in:
parent
2147d5cb33
commit
b2dbf9d9dd
|
@ -2240,10 +2240,13 @@ EAPI void
|
||||||
ecore_evas_shadow_geometry_set(Ecore_Evas *ee, int l, int r, int t, int b)
|
ecore_evas_shadow_geometry_set(Ecore_Evas *ee, int l, int r, int t, int b)
|
||||||
{
|
{
|
||||||
ECORE_EVAS_CHECK(ee);
|
ECORE_EVAS_CHECK(ee);
|
||||||
|
if ((ee->shadow.l == l) && (ee->shadow.r == r) &&
|
||||||
|
(ee->shadow.t == t) && (ee->shadow.b == b)) return;
|
||||||
ee->shadow.l = l;
|
ee->shadow.l = l;
|
||||||
ee->shadow.r = r;
|
ee->shadow.r = r;
|
||||||
ee->shadow.t = t;
|
ee->shadow.t = t;
|
||||||
ee->shadow.b = b;
|
ee->shadow.b = b;
|
||||||
|
ee->shadow.changed = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EAPI void
|
EAPI void
|
||||||
|
|
|
@ -207,6 +207,7 @@ struct _Ecore_Evas
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
int l, r, t, b;
|
int l, r, t, b;
|
||||||
|
int changed : 1;
|
||||||
} shadow;
|
} shadow;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
|
|
|
@ -1376,6 +1376,25 @@ _elm_win_opaque_update(Efl_Ui_Win_Data *sd)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
|
||||||
|
{
|
||||||
|
int l = 0, t = 0, r = 0, b = 0;
|
||||||
|
|
||||||
|
if (sd->frame_obj && !sd->fullscreen)
|
||||||
|
{
|
||||||
|
int fw, fh, ox, oy, ow, oh;
|
||||||
|
evas_object_geometry_get(sd->frame_obj, NULL, NULL, &fw, &fh);
|
||||||
|
edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.opaque",
|
||||||
|
&ox, &oy, &ow, &oh);
|
||||||
|
l = ox;
|
||||||
|
t = oy;
|
||||||
|
r = fw - ow - l;
|
||||||
|
b = fh - oh - t;
|
||||||
|
}
|
||||||
|
ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
|
_elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
|
||||||
{
|
{
|
||||||
|
@ -1386,6 +1405,7 @@ _elm_win_frame_obj_update(Efl_Ui_Win_Data *sd)
|
||||||
sd->wl.opaque_dirty = 1;
|
sd->wl.opaque_dirty = 1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
_elm_win_frame_geometry_adjust(sd);
|
||||||
if (sd->fullscreen)
|
if (sd->fullscreen)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_ELEMENTARY_WL2
|
#ifdef HAVE_ELEMENTARY_WL2
|
||||||
|
@ -2864,25 +2884,6 @@ super_skip:
|
||||||
efl_gfx_position_set(efl_super(obj, EFL_CANVAS_GROUP_CLASS), x, y);
|
efl_gfx_position_set(efl_super(obj, EFL_CANVAS_GROUP_CLASS), x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
|
||||||
_elm_win_frame_geometry_adjust(Efl_Ui_Win_Data *sd)
|
|
||||||
{
|
|
||||||
int l = 0, t = 0, r = 0, b = 0;
|
|
||||||
|
|
||||||
if (sd->frame_obj)
|
|
||||||
{
|
|
||||||
int fw, fh, ox, oy, ow, oh;
|
|
||||||
evas_object_geometry_get(sd->frame_obj, NULL, NULL, &fw, &fh);
|
|
||||||
edje_object_part_geometry_get(sd->frame_obj, "elm.spacer.opaque",
|
|
||||||
&ox, &oy, &ow, &oh);
|
|
||||||
l = ox;
|
|
||||||
t = oy;
|
|
||||||
r = fw - ow - l;
|
|
||||||
b = fh - oh - t;
|
|
||||||
}
|
|
||||||
ecore_evas_shadow_geometry_set(sd->ee, l, r, t, b);
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static void
|
EOLIAN static void
|
||||||
_efl_ui_win_efl_gfx_size_set(Eo *obj, Efl_Ui_Win_Data *sd, Evas_Coord w, Evas_Coord h)
|
_efl_ui_win_efl_gfx_size_set(Eo *obj, Efl_Ui_Win_Data *sd, Evas_Coord w, Evas_Coord h)
|
||||||
{
|
{
|
||||||
|
@ -3893,7 +3894,7 @@ _elm_win_frame_cb_maximize(void *data,
|
||||||
if (sd->maximized) value = EINA_FALSE;
|
if (sd->maximized) value = EINA_FALSE;
|
||||||
else value = EINA_TRUE;
|
else value = EINA_TRUE;
|
||||||
|
|
||||||
TRAP(sd, maximized_set, value);
|
efl_ui_win_maximized_set(sd->obj, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -1608,6 +1608,18 @@ _ecore_evas_x_event_window_destroy(void *data EINA_UNUSED, int type EINA_UNUSED,
|
||||||
return ECORE_CALLBACK_PASS_ON;
|
return ECORE_CALLBACK_PASS_ON;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
_ecore_evas_x_shadow_update(Ecore_Evas *ee)
|
||||||
|
{
|
||||||
|
if (EINA_LIKELY(!ee->shadow.changed)) return;
|
||||||
|
|
||||||
|
int shadow[4] = { ee->shadow.l, ee->shadow.r, ee->shadow.t, ee->shadow.b };
|
||||||
|
ee->shadow.changed = EINA_FALSE;
|
||||||
|
ecore_x_window_prop_property_set(ee->prop.window,
|
||||||
|
ECORE_X_ATOM_GTK_FRAME_EXTENTS,
|
||||||
|
ECORE_X_ATOM_CARDINAL, 32, shadow, 4);
|
||||||
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
_ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
_ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
|
||||||
{
|
{
|
||||||
|
@ -1638,6 +1650,7 @@ _ecore_evas_x_event_window_configure(void *data EINA_UNUSED, int type EINA_UNUSE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ecore_evas_x_shadow_update(ee);
|
||||||
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
||||||
if (!ECORE_EVAS_PORTRAIT(ee))
|
if (!ECORE_EVAS_PORTRAIT(ee))
|
||||||
SWAP_INT(fw, fh);
|
SWAP_INT(fw, fh);
|
||||||
|
@ -2170,7 +2183,6 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
|
||||||
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
|
Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data;
|
||||||
Eina_Bool changed = EINA_FALSE;
|
Eina_Bool changed = EINA_FALSE;
|
||||||
int fw = 0, fh = 0;
|
int fw = 0, fh = 0;
|
||||||
int zero[4] = {0};
|
|
||||||
|
|
||||||
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh);
|
||||||
if (ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh);
|
if (ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh);
|
||||||
|
@ -2198,6 +2210,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ecore_evas_x_shadow_update(ee);
|
||||||
if (edata->direct_resize)
|
if (edata->direct_resize)
|
||||||
{
|
{
|
||||||
if ((ee->w == w) && (ee->h == h)) return;
|
if ((ee->w == w) && (ee->h == h)) return;
|
||||||
|
@ -2234,14 +2247,6 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h)
|
||||||
if (changed) edata->configure_reqs++;
|
if (changed) edata->configure_reqs++;
|
||||||
if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w + fw, h + fh);
|
if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w + fw, h + fh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (memcmp(&zero, &ee->shadow, sizeof(zero)))
|
|
||||||
{
|
|
||||||
ecore_x_window_prop_property_set(ee->prop.window,
|
|
||||||
ECORE_X_ATOM_GTK_FRAME_EXTENTS,
|
|
||||||
ECORE_X_ATOM_CARDINAL, 32,
|
|
||||||
&ee->shadow, 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue