switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
- e_client_frame_geometry_set(ec, x1, yy1, w, h);
+ e_client_maximized_geometry_set(ec, x1, yy1, w, h);
break;
case E_MAXIMIZE_VERTICAL:
- e_client_frame_geometry_set(ec, ec->x, yy1, ec->w, h);
+ e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
break;
case E_MAXIMIZE_HORIZONTAL:
- e_client_frame_geometry_set(ec, x1, ec->y, w, ec->h);
+ e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
break;
case E_MAXIMIZE_LEFT:
- e_client_frame_geometry_set(ec, ec->desk->geom.x, ec->desk->geom.y, w / 2, h);
+ e_client_maximized_geometry_set(ec, ec->desk->geom.x, ec->desk->geom.y, w / 2, h);
break;
case E_MAXIMIZE_RIGHT:
- e_client_frame_geometry_set(ec, x1, ec->desk->geom.y, w / 2, h);
+ e_client_maximized_geometry_set(ec, x1, ec->desk->geom.y, w / 2, h);
break;
}
break;
switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
- e_client_frame_geometry_set(ec, zx, zy, zw, zh);
+ e_client_maximized_geometry_set(ec, zx, zy, zw, zh);
break;
case E_MAXIMIZE_VERTICAL:
- e_client_frame_geometry_set(ec, ec->x, zy, ec->w, zh);
+ e_client_maximized_geometry_set(ec, ec->x, zy, ec->w, zh);
break;
case E_MAXIMIZE_HORIZONTAL:
- e_client_frame_geometry_set(ec, zx, ec->y, zw, ec->h);
+ e_client_maximized_geometry_set(ec, zx, ec->y, zw, ec->h);
break;
case E_MAXIMIZE_LEFT:
- e_client_frame_geometry_set(ec, zx, zy, zw / 2, zh);
+ e_client_maximized_geometry_set(ec, zx, zy, zw / 2, zh);
break;
case E_MAXIMIZE_RIGHT:
- e_client_frame_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
+ e_client_maximized_geometry_set(ec, zx + zw / 2, zy, zw / 2, zh);
break;
}
switch (max & E_MAXIMIZE_DIRECTION)
{
case E_MAXIMIZE_BOTH:
- e_client_frame_geometry_set(ec, x1, yy1, w, h);
+ e_client_maximized_geometry_set(ec, x1, yy1, w, h);
break;
case E_MAXIMIZE_VERTICAL:
- e_client_frame_geometry_set(ec, ec->x, yy1, ec->w, h);
+ e_client_maximized_geometry_set(ec, ec->x, yy1, ec->w, h);
break;
case E_MAXIMIZE_HORIZONTAL:
- e_client_frame_geometry_set(ec, x1, ec->y, w, ec->h);
+ e_client_maximized_geometry_set(ec, x1, ec->y, w, ec->h);
break;
case E_MAXIMIZE_LEFT:
- e_client_frame_geometry_set(ec, ec->desk->geom.x, ec->desk->geom.y, w / 2, h);
+ e_client_maximized_geometry_set(ec, ec->desk->geom.x, ec->desk->geom.y, w / 2, h);
break;
case E_MAXIMIZE_RIGHT:
- e_client_frame_geometry_set(ec, x1, ec->desk->geom.y, w / 2, h);
+ e_client_maximized_geometry_set(ec, x1, ec->desk->geom.y, w / 2, h);
break;
}
break;
///////////////////////////////////////
+EINTERN void
+e_client_maximized_geometry_set(E_Client *ec, int x, int y, int w, int h)
+{
+ if (!ec) return;
+
+ ec->maximized_info.x = x;
+ ec->maximized_info.y = y;
+ ec->maximized_info.w = w;
+ ec->maximized_info.h = h;
+
+ e_client_frame_geometry_set(ec, x, y, w, h);
+}
+
+EINTERN void
+e_client_maximized_geometry_get(E_Client *ec, int *x, int *y, int *w, int *h)
+{
+ if (!ec) return;
+
+ if (x) *x = ec->maximized_info.x;
+ if (y) *y = ec->maximized_info.y;
+ if (w) *w = ec->maximized_info.w;
+ if (h) *h = ec->maximized_info.h;
+}
+
E_API void
e_client_maximize(E_Client *ec, E_Maximize max)
{
ec->comp_data->maximize_pre = 1;
}
+static void
+_e_comp_wl_evas_cb_maximize_done(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
+{
+ E_Client *ec = data;
+ int w, h;
+
+ if (e_object_is_del(E_OBJECT(ec))) return;
+
+ if (ec->comp_data->shell.configure_send)
+ {
+ e_client_maximized_geometry_get(ec, NULL, NULL, &w, &h);
+ ec->comp_data->shell.configure_send(ec->comp_data->shell.surface, 0, w, h);
+ }
+ ec->comp_data->maximize_pre = 0;
+}
+
static void
_e_comp_wl_evas_cb_delete_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
if (!ec->override)
{
evas_object_smart_callback_add(ec->frame, "client_resize", _e_comp_wl_evas_cb_resize, ec);
- evas_object_smart_callback_add(ec->frame, "maximize_done", _e_comp_wl_evas_cb_state_update, ec);
+ evas_object_smart_callback_add(ec->frame, "maximize_done", _e_comp_wl_evas_cb_maximize_done,ec);
evas_object_smart_callback_add(ec->frame, "unmaximize_done", _e_comp_wl_evas_cb_state_update, ec);
evas_object_smart_callback_add(ec->frame, "maximize_pre", _e_comp_wl_evas_cb_maximize_pre, ec);
evas_object_smart_callback_add(ec->frame, "unmaximize_pre", _e_comp_wl_evas_cb_maximize_pre, ec);
if (!ec->override)
{
evas_object_smart_callback_del(ec->frame, "client_resize", _e_comp_wl_evas_cb_resize);
- evas_object_smart_callback_del(ec->frame, "maximize_done", _e_comp_wl_evas_cb_state_update);
+ evas_object_smart_callback_del(ec->frame, "maximize_done", _e_comp_wl_evas_cb_maximize_done);
evas_object_smart_callback_del(ec->frame, "unmaximize_done", _e_comp_wl_evas_cb_state_update);
evas_object_smart_callback_del(ec->frame, "maximize_pre", _e_comp_wl_evas_cb_maximize_pre);
evas_object_smart_callback_del(ec->frame, "unmaximize_pre", _e_comp_wl_evas_cb_maximize_pre);
* If the width or height arguments are zero, it means the client should
* decide its own window dimension. See xdg-shell-v6.xml
*/
- LOG("FORCELY STAY current size (%d %d) of E_Client, requested size "
+ int mw, mh;
+ e_client_maximized_geometry_get(ec, NULL, NULL, &mw, &mh);
+ LOG("FORCELY STAY current maximized size (%d %d) of E_Client, requested size "
"is (%d %d), the state (maximize %d, fullscreen %d)",
- ec, ec->w, ec->h, width, height,
+ ec, mw, mh, width, height,
toplevel->pending.state.maximized,
toplevel->pending.state.fullscreen);
- toplevel->pending.size.w = ec->w;
- toplevel->pending.size.h = ec->h;
+ toplevel->pending.size.w = mw;
+ toplevel->pending.size.h = mh;
}
focused = e_client_focused_get();
return;
}
+ ELOGF("XDG6", "Toplevel Maximized Set. res:%p, lock_user_maximize:%d", ec, resource, ec->lock_user_maximize);
if (!ec->lock_user_maximize)
{
max = (e_config->maximize_policy & E_MAXIMIZE_TYPE) | E_MAXIMIZE_BOTH;
return;
}
+ ELOGF("XDG6", "Toplevel Maximized Unset. res:%p, lock_user_maximize:%d", ec, resource, ec->lock_user_maximize);
/* it's doubtful */
e_client_unmaximize(ec, E_MAXIMIZE_BOTH);
}
return;
}
+ ELOGF("XDG6", "Toplevel Fullscreen Set. res:%p, lock_user_fullscreen:%d", ec, resource, ec->lock_user_fullscreen);
if (!ec->lock_user_fullscreen)
e_client_fullscreen(ec, e_config->fullscreen_policy);
}
return;
}
+ ELOGF("XDG6", "Toplevel Fullscreen Unset. res:%p, lock_user_fullscreen:%d", ec, resource, ec->lock_user_fullscreen);
if (!ec->lock_user_fullscreen)
e_client_unfullscreen(ec);
}
return;
}
+ ELOGF("XDG6", "Toplevel Minimized Set. res:%p, lock_client_iconify:%d", ec, resource, ec->lock_client_iconify);
if (!ec->lock_client_iconify)
e_client_iconify(ec);
}