Esempio n. 1
0
boolean FcitxNotificationItemEnable(FcitxNotificationItem* notificationitem, FcitxNotificationItemAvailableCallback callback, void* data)
{
    if (!callback || notificationitem->callback)
        return false;
    if (notificationitem->serviceName) {
        FcitxLog(ERROR, "This should not happen, please report bug.");
        return false;
    }
    notificationitem->callback = callback;
    notificationitem->data = data;
    asprintf(&notificationitem->serviceName, "org.kde.StatusNotifierItem-%u-%d", getpid(), ++notificationitem->index);

    /* once we have name, request it first */
    DBusError err;
    dbus_error_init(&err);
    dbus_bus_request_name(notificationitem->conn, notificationitem->serviceName,
                                    DBUS_NAME_FLAG_DO_NOT_QUEUE,
                                    &err);
    if (dbus_error_is_set(&err)) {
        FcitxLog(WARNING, "NotificationItem Name Error (%s)", err.message);
    }
    dbus_error_free(&err);

    if (notificationitem->available) {
        if (notificationitem->callback) {
            FcitxNotificationItemRegister(notificationitem);
        }
    }
    return true;
}
Esempio n. 2
0
void FcitxNotificationItemSetAvailable(FcitxNotificationItem* notificationitem, boolean available)
{
    if (notificationitem->available != available) {
        notificationitem->available = available;
        if (available) {
            if (notificationitem->callback) {
                FcitxNotificationItemRegister(notificationitem);
            }
        } else {
            if (notificationitem->callback) {
                if (notificationitem->callback) {
                    notificationitem->callback(notificationitem->data, false);
                }
            }
        }
    }
}