#include "services/e_service_softkey.h"
#include "services/e_service_launcher.h"
#include "services/e_service_taskbar.h"
+#include "services/e_service_kvm.h"
#include "e_policy_wl_display.h"
#include "e_policy_conformant_internal.h"
#include "e_policy_visibility.h"
TZSH_SRV_ROLE_MAGNIFIER,
TZSH_SRV_ROLE_LAUNCHER,
TZSH_SRV_ROLE_TASKBAR,
+ TZSH_SRV_ROLE_KVM,
TZSH_SRV_ROLE_MAX
} Tzsh_Srv_Role;
else if (!e_util_strcmp(name, "magnifier" )) role = TZSH_SRV_ROLE_MAGNIFIER;
else if (!e_util_strcmp(name, "launcher" )) role = TZSH_SRV_ROLE_LAUNCHER;
else if (!e_util_strcmp(name, "taskbar" )) role = TZSH_SRV_ROLE_TASKBAR;
+ else if (!e_util_strcmp(name, "KVM" )) role = TZSH_SRV_ROLE_KVM;
return role;
}
wl_resource_set_implementation(res, &_tzsh_srv_taskbar_iface, tzsh_srv, NULL);
}
+static void
+_tzsh_srv_kvm_cb_destroy(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+ wl_resource_destroy(resource);
+}
+
+static void
+_tzsh_srv_kvm_cb_perform_drop(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+ E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+ E_Client *ec;
+
+ tzsh_srv = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+ ec = tzsh_srv->ec;
+ EINA_SAFETY_ON_NULL_RETURN(ec);
+
+ if (!e_comp_wl->drag) return;
+
+ e_service_kvm_drop_perform(ec);
+}
+
+static void
+_tzsh_srv_kvm_cb_secondary_selection_set(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+ E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+ E_Client *ec;
+
+ tzsh_srv = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+ ec = tzsh_srv->ec;
+ EINA_SAFETY_ON_NULL_RETURN(ec);
+
+ e_service_kvm_secondary_selection_set(ec, EINA_TRUE);
+}
+
+static void
+_tzsh_srv_kvm_cb_secondary_selection_unset(struct wl_client *client EINA_UNUSED, struct wl_resource *resource)
+{
+ E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+ E_Client *ec;
+
+ tzsh_srv = wl_resource_get_user_data(resource);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+
+ ec = tzsh_srv->ec;
+ EINA_SAFETY_ON_NULL_RETURN(ec);
+
+ e_service_kvm_secondary_selection_set(ec, EINA_FALSE);
+}
+
+static const struct tws_service_kvm_interface _tzsh_srv_kvm_iface =
+{
+ _tzsh_srv_kvm_cb_destroy,
+ _tzsh_srv_kvm_cb_perform_drop,
+ _tzsh_srv_kvm_cb_secondary_selection_set,
+ _tzsh_srv_kvm_cb_secondary_selection_unset,
+};
+
+static void
+_tzsh_srv_iface_cb_kvm_get(struct wl_client *client, struct wl_resource *res_tzsh_srv, uint32_t id)
+{
+ E_Service_Kvm *service = NULL;
+ E_Policy_Wl_Tzsh_Srv *tzsh_srv;
+ struct wl_resource *res;
+ E_Client *ec;
+
+ tzsh_srv = wl_resource_get_user_data(res_tzsh_srv);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_srv);
+ EINA_SAFETY_ON_NULL_RETURN(tzsh_srv->tzsh);
+
+ if (!eina_list_data_find(polwl->tzsh_srvs, tzsh_srv))
+ return;
+
+ res = wl_resource_create(client,
+ &tws_service_kvm_interface,
+ 1,
+ id);
+ if (!res)
+ {
+ wl_client_post_no_memory(client);
+ return;
+ }
+
+ ELOGF("KVM", "multi control resource created, res:%p, tzsh_srv:%p, res_tzsh_srv:%p", NULL, res, tzsh_srv, res_tzsh_srv);
+
+ ec = tzsh_srv->ec;
+ if (ec)
+ service = e_service_kvm_get();
+
+ if (service)
+ {
+ ELOGF("KVM", "multi control resource set. res:%p, service:%p, ec:%p", NULL, res, service, ec);
+ e_service_kvm_wl_resource_set(service, res);
+ }
+
+ wl_resource_set_implementation(res, &_tzsh_srv_kvm_iface, tzsh_srv, NULL);
+}
+
static const struct tws_service_interface _tzsh_srv_iface =
{
_tzsh_srv_iface_cb_destroy,
_tzsh_srv_iface_cb_magnifier_get,
_tzsh_srv_iface_cb_launcher_get,
_tzsh_srv_iface_cb_taskbar_get,
+ _tzsh_srv_iface_cb_kvm_get,
};
static Eina_Bool
case TZSH_SRV_ROLE_TASKBAR:
privilege = E_PRIVILEGE_TASKBAR_SERVICE;
break;
+ /* TODO: need to check privilege
+ case TZSH_SRV_ROLE_KVM:
+ privilege = E_PRIVILEGE_KVM_SERVICE;
+ break;
+ */
default:
return EINA_TRUE;
}
e_service_launcher_client_set(tzsh_srv->ec);
else if (role == TZSH_SRV_ROLE_TASKBAR)
e_service_taskbar_client_set(tzsh_srv->ec);
+ else if (role == TZSH_SRV_ROLE_KVM)
+ e_service_kvm_client_set(tzsh_srv->ec);
e_client_desk_iconify_skip_set(tzsh_srv->ec, EINA_TRUE);
}