
org.freedesktop.wayland.server.EventLoop Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of stubs-server Show documentation
Show all versions of stubs-server Show documentation
Wayland protocol Java-language Binding Stubs
The newest version!
//Copyright 2015 Erik De Rijcke
//
//Licensed under the Apache License,Version2.0(the"License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at
//
//http://www.apache.org/licenses/LICENSE-2.0
//
//Unless required by applicable law or agreed to in writing,software
//distributed under the License is distributed on an"AS IS"BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
package org.freedesktop.wayland.server;
import org.freedesktop.jaccall.Pointer;
import org.freedesktop.jaccall.Ptr;
import org.freedesktop.jaccall.Unsigned;
import org.freedesktop.wayland.server.jaccall.WaylandServerCore;
import org.freedesktop.wayland.server.jaccall.wl_event_loop_fd_func_t;
import org.freedesktop.wayland.server.jaccall.wl_event_loop_idle_func_t;
import org.freedesktop.wayland.server.jaccall.wl_event_loop_signal_func_t;
import org.freedesktop.wayland.server.jaccall.wl_event_loop_timer_func_t;
import org.freedesktop.wayland.util.ObjectCache;
import java.util.HashSet;
import java.util.Set;
import static org.freedesktop.jaccall.Pointer.wrap;
import static org.freedesktop.wayland.server.jaccall.Pointerwl_event_loop_fd_func_t.nref;
import static org.freedesktop.wayland.server.jaccall.Pointerwl_event_loop_idle_func_t.nref;
import static org.freedesktop.wayland.server.jaccall.Pointerwl_event_loop_signal_func_t.nref;
import static org.freedesktop.wayland.server.jaccall.Pointerwl_event_loop_timer_func_t.nref;
public class EventLoop {
private static final Pointer WL_EVENT_LOOP_FD_FUNC = nref(new wl_event_loop_fd_func_t() {
@Override
public int $(final int fd,
@Unsigned final int mask,
@Ptr(Object.class) final long data) {
final FileDescriptorEventHandler handler = (FileDescriptorEventHandler) wrap(Object.class,
data).dref();
return handler.handle(fd,
mask);
}
});
private static final Pointer WL_EVENT_LOOP_TIMER_FUNC = nref(new wl_event_loop_timer_func_t() {
@Override
public int $(@Ptr(Object.class)
final long data) {
final TimerEventHandler handler = (TimerEventHandler) wrap(Object.class,
data).dref();
return handler.handle();
}
});
private static final Pointer WL_EVENT_LOOP_SIGNAL_FUNC = nref(new wl_event_loop_signal_func_t() {
@Override
public int $(final int signal_number,
@Ptr(Object.class) final long data) {
final SignalEventHandler handler = (SignalEventHandler) wrap(Object.class,
data).dref();
return handler.handle(signal_number);
}
});
private static final Pointer WL_EVENT_LOOP_IDLE_FUNC = nref(new wl_event_loop_idle_func_t() {
@Override
public void $(@Ptr(Object.class) final long data) {
final IdleHandler handler = (IdleHandler) wrap(Object.class,
data).dref();
handler.handle();
}
});
public final Long pointer;
private final Set destroyListeners = new HashSet<>();
private EventLoop(final Long pointer) {
this.pointer = pointer;
addDestroyListener(new Listener() {
@Override
public void handle() {
notifyDestroyListeners();
EventLoop.this.destroyListeners.clear();
ObjectCache.remove(EventLoop.this.pointer);
free();
}
});
ObjectCache.store(this.pointer,
this);
}
private void addDestroyListener(final Listener listener) {
WaylandServerCore.INSTANCE()
.wl_event_loop_add_destroy_listener(this.pointer,
listener.pointer.address);
}
private void notifyDestroyListeners() {
for (final DestroyListener listener : new HashSet<>(this.destroyListeners)) {
listener.handle();
}
}
public static EventLoop create() {
return EventLoop.get(WaylandServerCore.INSTANCE()
.wl_event_loop_create());
}
public static EventLoop get(final Long pointer) {
if (pointer == 0L) {
return null;
}
EventLoop eventLoop = ObjectCache.from(pointer);
if (eventLoop == null) {
eventLoop = new EventLoop(pointer);
}
return eventLoop;
}
public EventSource addFileDescriptor(final int fd,
final int mask,
final FileDescriptorEventHandler handler) {
final Pointer
© 2015 - 2025 Weber Informatics LLC | Privacy Policy