[E_CLIENT_HOOK_EVAL_VISIBILITY] = NULL,
[E_CLIENT_HOOK_ICONIFY] = NULL,
[E_CLIENT_HOOK_UNICONIFY] = NULL,
+ [E_CLIENT_HOOK_AUX_HINT_CHANGE] = NULL,
};
///////////////////////////////////////////
{
_e_client_event_property(ec, prop);
}
+
+#ifdef HAVE_WAYLAND_ONLY
+ {
+ E_Comp_Wl_Client_Data *cdata = (E_Comp_Wl_Client_Data*)ec->comp_data;
+
+ if (cdata && cdata->aux_hint.changed)
+ {
+ _e_client_hook_call(E_CLIENT_HOOK_AUX_HINT_CHANGE, ec);
+ cdata->aux_hint.changed = 0;
+ }
+ }
+#endif
+
_e_client_hook_call(E_CLIENT_HOOK_EVAL_END, ec);
}
return NULL;
}
+#ifdef HAVE_WAYLAND_ONLY
+ {
+ E_Comp_Wl_Client_Data *cdata = (E_Comp_Wl_Client_Data*)ec->comp_data;
+
+ if (cdata && cdata->aux_hint.changed)
+ {
+ _e_client_hook_call(E_CLIENT_HOOK_AUX_HINT_CHANGE, ec);
+ cdata->aux_hint.changed = 0;
+ }
+ }
+#endif
+
if (ec->override)
_e_client_zone_update(ec);
else
{
return aux_hints_supported;
}
+
+EAPI Eina_Bool
+e_hints_aux_hint_add(E_Client *ec, int32_t id, const char *name, const char *val)
+{
+ if (!ec) return EINA_FALSE;
+ return e_hints_aux_hint_add_with_pixmap(ec->pixmap, id, name, val);
+}
+
+EAPI Eina_Bool
+e_hints_aux_hint_change(E_Client *ec, int32_t id, const char *val)
+{
+ if (!ec) return EINA_FALSE;
+ return e_hints_aux_hint_change_with_pixmap(ec->pixmap, id, val);
+}
+
+EAPI Eina_Bool
+e_hints_aux_hint_del(E_Client *ec, int32_t id)
+{
+ if (!ec) return EINA_FALSE;
+ return e_hints_aux_hint_del_with_pixmap(ec->pixmap, id);
+}
+
+EAPI const char *
+e_hints_aux_hint_value_get(E_Client *ec, const char *name)
+{
+ if (!ec) return NULL;
+ return e_hints_aux_hint_value_get_with_pixmap(ec->pixmap, name);
+}
+
+EAPI Eina_Bool
+e_hints_aux_hint_add_with_pixmap(E_Pixmap *cp, int32_t id, const char *name, const char *val)
+{
+#ifdef HAVE_WAYLAND_ONLY
+ E_Comp_Wl_Client_Data *cdata;
+ Eina_Bool found = EINA_FALSE;
+ E_Comp_Wl_Aux_Hint *hint;
+ Eina_List *l;
+
+ if (!cp) return EINA_FALSE;
+ cdata = e_pixmap_cdata_get(cp);
+ if (!cdata) return EINA_FALSE;
+
+ EINA_LIST_FOREACH(cdata->aux_hint.hints, l, hint)
+ {
+ if (hint->id == id)
+ {
+ if (strcmp(hint->val, val) != 0)
+ {
+ ELOGF("COMP", "AUX_HINT |Change [pixmap = %d] [%d:%s:%s -> %s]", cp, e_pixmap_client_get(cp),
+ id, hint->hint, hint->val, val);
+ eina_stringshare_del(hint->val);
+ hint->val = eina_stringshare_add(val);
+ cdata->aux_hint.changed = 1;
+ }
+ found = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (!found)
+ {
+ hint = E_NEW(E_Comp_Wl_Aux_Hint, 1);
+ memset(hint, 0, sizeof(E_Comp_Wl_Aux_Hint));
+ if (hint)
+ {
+ hint->id = id;
+ hint->hint = eina_stringshare_add(name);
+ hint->val = eina_stringshare_add(val);
+ cdata->aux_hint.hints = eina_list_append(cdata->aux_hint.hints, hint);
+ cdata->aux_hint.changed = 1;
+ ELOGF("COMP", "AUX_HINT |Add [%d:%s:%s]", cp, e_pixmap_client_get(cp),
+ id, hint->hint, hint->val);
+ }
+ }
+
+ if (!found)
+ return EINA_TRUE;
+ return EINA_FALSE;
+#endif
+
+ return EINA_FALSE;
+}
+
+EAPI Eina_Bool
+e_hints_aux_hint_change_with_pixmap(E_Pixmap *cp, int32_t id, const char *val)
+{
+#ifdef HAVE_WAYLAND_ONLY
+ E_Comp_Wl_Client_Data *cdata;
+ Eina_List *l;
+ E_Comp_Wl_Aux_Hint *hint;
+ Eina_Bool found = EINA_FALSE;
+
+ if (!cp) return EINA_FALSE;
+ cdata = e_pixmap_cdata_get(cp);
+ if (!cdata) return EINA_FALSE;
+
+ EINA_LIST_FOREACH(cdata->aux_hint.hints, l, hint)
+ {
+ if (hint->id == id)
+ {
+ if ((hint->val) && (strcmp(hint->val, val) != 0))
+ {
+ ELOGF("COMP", "AUX_HINT |Change [%d:%s:%s -> %s]", cp, e_pixmap_client_get(cp),
+ id, hint->hint, hint->val, val);
+ eina_stringshare_del(hint->val);
+ hint->val = eina_stringshare_add(val);
+ cdata->aux_hint.changed = 1;
+ }
+ found = EINA_TRUE;
+ break;
+ }
+ }
+
+ if (found)
+ return EINA_TRUE;
+ return EINA_FALSE;
+#endif
+ return EINA_FALSE;
+}
+
+EAPI Eina_Bool
+e_hints_aux_hint_del_with_pixmap(E_Pixmap *cp, int32_t id)
+{
+#ifdef HAVE_WAYLAND_ONLY
+ E_Comp_Wl_Client_Data *cdata;
+ Eina_List *l, *ll;
+ E_Comp_Wl_Aux_Hint *hint;
+ unsigned int res = -1;
+
+ if (!cp) return EINA_FALSE;
+ cdata = e_pixmap_cdata_get(cp);
+ if (!cdata) return EINA_FALSE;
+
+ EINA_LIST_FOREACH_SAFE(cdata->aux_hint.hints, l, ll, hint)
+ {
+ if (hint->id == id)
+ {
+ ELOGF("COMP", "AUX_HINT |Del [%d:%s:%s]", cp, e_pixmap_client_get(cp), id, hint->hint, hint->val);
+ if (hint->hint) eina_stringshare_del(hint->hint);
+ if (hint->val) eina_stringshare_del(hint->val);
+ cdata->aux_hint.hints = eina_list_remove_list(cdata->aux_hint.hints, l);
+ cdata->aux_hint.changed = 1;
+ res = hint->id;
+ E_FREE(hint);
+ break;
+ }
+ }
+
+ return !!res;
+#endif
+
+ return EINA_FALSE;
+}
+
+EAPI const char *
+e_hints_aux_hint_value_get_with_pixmap(E_Pixmap *cp, const char *name)
+{
+#ifdef HAVE_WAYLAND_ONLY
+ E_Comp_Wl_Client_Data *cdata;
+ Eina_List *l;
+ E_Comp_Wl_Aux_Hint *hint;
+ const char *res = NULL;
+
+ if (!cp) return NULL;
+ cdata = e_pixmap_cdata_get(cp);
+ if (!cdata) return NULL;
+
+ EINA_LIST_FOREACH(cdata->aux_hint.hints, l, hint)
+ {
+ if (!strcmp(hint->hint, name))
+ {
+ res = hint->val;
+ break;
+ }
+ }
+
+ return res;
+#endif
+ return NULL;
+}
E_API const Eina_List * e_hints_aux_hint_supported_del(const char *hint);
E_API const Eina_List * e_hints_aux_hint_supported_get(void);
+EAPI Eina_Bool e_hints_aux_hint_add(E_Client *ec, int32_t id, const char *name, const char *val);
+EAPI Eina_Bool e_hints_aux_hint_change(E_Client *ec, int32_t id, const char *val);
+EAPI Eina_Bool e_hints_aux_hint_del(E_Client *ec, int32_t id);
+EAPI const char * e_hints_aux_hint_value_get(E_Client *ec, const char *name);
+
+EAPI Eina_Bool e_hints_aux_hint_add_with_pixmap(E_Pixmap *cp, int32_t id, const char *name, const char *val);
+EAPI Eina_Bool e_hints_aux_hint_change_with_pixmap(E_Pixmap *cp, int32_t id, const char *val);
+EAPI Eina_Bool e_hints_aux_hint_del_with_pixmap(E_Pixmap *cp, int32_t id);
+EAPI const char * e_hints_aux_hint_value_get_with_pixmap(E_Pixmap *cp, const char *name);
+
#ifdef E_COMP_X_H
E_API void e_hints_window_state_update(E_Client *ec, int state, int action);
extern E_API Ecore_X_Atom ATM__QTOPIA_SOFT_MENU;