struct wl_signal iconify;
struct wl_signal uniconify;
struct wl_signal maximize;
+ struct wl_signal maximize_done;
struct wl_signal unmaximize;
+ struct wl_signal unmaximize_done;
struct wl_signal fullscreen_pre;
struct wl_signal fullscreen;
struct wl_signal unfullscreen;
wl_signal_init(&priv->events.iconify);
wl_signal_init(&priv->events.uniconify);
wl_signal_init(&priv->events.maximize);
+ wl_signal_init(&priv->events.maximize_done);
wl_signal_init(&priv->events.unmaximize);
+ wl_signal_init(&priv->events.unmaximize_done);
wl_signal_init(&priv->events.fullscreen_pre);
wl_signal_init(&priv->events.fullscreen);
wl_signal_init(&priv->events.unfullscreen);
ec->maximized = max;
ec->changes.need_unmaximize = 0;
}
+
+ // call the maximize_done signal of a client
+ wl_signal_emit(&PRI(ec)->events.maximize_done, &max);
}
E_API void
ec->maximized = E_MAXIMIZE_NONE;
ec->changes.need_unmaximize = 0;
+
+ // call the unmaximize_done signal of a client
+ wl_signal_emit(&PRI(ec)->events.unmaximize_done, &max);
}
EINTERN void
wl_signal_add(&priv->events.maximize, listener);
}
+EINTERN void
+e_client_maximize_done_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.maximize_done, listener);
+}
+
EINTERN void
e_client_unmaximize_listener_add(E_Client *ec, struct wl_listener *listener)
{
wl_signal_add(&priv->events.unmaximize, listener);
}
+EINTERN void
+e_client_unmaximize_done_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.unmaximize_done, listener);
+}
+
EINTERN void
e_client_fullscreen_pre_listener_add(E_Client *ec, struct wl_listener *listener)
{
EINTERN void e_client_iconify_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_uniconify_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_maximize_listener_add(E_Client *ec, struct wl_listener *listener);
+EINTERN void e_client_maximize_done_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_unmaximize_listener_add(E_Client *ec, struct wl_listener *listener);
+EINTERN void e_client_unmaximize_done_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_fullscreen_pre_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_fullscreen_listener_add(E_Client *ec, struct wl_listener *listener);
EINTERN void e_client_unfullscreen_listener_add(E_Client *ec, struct wl_listener *listener);
struct wl_listener client_stick;
struct wl_listener client_unstick;
struct wl_listener client_maximize;
+ struct wl_listener client_maximize_done;
struct wl_listener client_unmaximize;
+ struct wl_listener client_unmaximize_done;
struct wl_listener client_activate_done;
struct wl_listener client_stay_within_margin;
struct wl_listener client_mouse_move;
wl_list_remove(&eda_client->client_mouse_move.link);
wl_list_remove(&eda_client->client_stay_within_margin.link);
wl_list_remove(&eda_client->client_activate_done.link);
+ wl_list_remove(&eda_client->client_unmaximize_done.link);
wl_list_remove(&eda_client->client_unmaximize.link);
+ wl_list_remove(&eda_client->client_maximize_done.link);
wl_list_remove(&eda_client->client_maximize.link);
wl_list_remove(&eda_client->client_unstick.link);
wl_list_remove(&eda_client->client_stick.link);
E_Desk_Area *eda;
E_Client *ec;
E_Maximize max;
- int w, h;
eda_client = wl_container_of(listener, eda_client, client_maximize);
eda = eda_client->eda;
}
_e_desk_area_ec_maximize(eda, ec, max);
+ }
+}
- e_client_maximized_geometry_get(ec, NULL, NULL, &w, &h);
- e_client_shell_configure_send(ec, 0, w, h);
+static void
+_desk_area_cb_client_maximize_done(struct wl_listener *listener, void *data)
+{
+ E_Desk_Area_Private_Client *eda_client;
+ E_Client *ec;
+ int w, h;
- e_client_maximize_pre_set(ec, EINA_FALSE);
- }
+ eda_client = wl_container_of(listener, eda_client, client_maximize_done);
+ ec = eda_client->ec;
+
+ e_client_maximized_geometry_get(ec, NULL, NULL, &w, &h);
+ e_client_shell_configure_send(ec, 0, w, h);
+
+ e_client_maximize_pre_set(ec, EINA_FALSE);
}
static void
if (horiz)
ec->saved.w = ec->saved.x = 0;
}
+ }
+}
+
+static void
+_desk_area_cb_client_unmaximize_done(struct wl_listener *listener, void *data)
+{
+ E_Desk_Area_Private_Client *eda_client;
+ E_Client *ec;
- if (ec->comp_data && ec->comp_data->shell.configure_send)
- _e_desk_area_configure_send(ec, 0, 0);
+ eda_client = wl_container_of(listener, eda_client, client_unmaximize_done);
+ ec = eda_client->ec;
- e_client_maximize_pre_set(ec, EINA_FALSE);
- }
+ if (ec->comp_data && ec->comp_data->shell.configure_send)
+ _e_desk_area_configure_send(ec, 0, 0);
+
+ e_client_maximize_pre_set(ec, EINA_FALSE);
}
static void
e_client_unstick_listener_add(ec, &eda_client->client_unstick);
eda_client->client_maximize.notify = _desk_area_cb_client_maximize;
e_client_maximize_listener_add(ec, &eda_client->client_maximize);
+ eda_client->client_maximize_done.notify = _desk_area_cb_client_maximize_done;
+ e_client_maximize_done_listener_add(ec, &eda_client->client_maximize_done);
eda_client->client_unmaximize.notify = _desk_area_cb_client_unmaximize;
e_client_unmaximize_listener_add(ec, &eda_client->client_unmaximize);
+ eda_client->client_unmaximize_done.notify = _desk_area_cb_client_unmaximize_done;
+ e_client_unmaximize_done_listener_add(ec, &eda_client->client_unmaximize_done);
eda_client->client_activate_done.notify = _desk_area_cb_client_activate_done;
e_client_activate_done_listener_add(ec, &eda_client->client_activate_done);
eda_client->client_stay_within_margin.notify = _desk_area_cb_client_stay_within_margin;