Prima
view release on metacpan or search on metacpan
unix/event.c view on Meta::CPAN
,"KeyPress" ,"KeyRelease" ,"ButtonPress" ,"ButtonRelease" ,"MotionNotify" ,"EnterNotify"
,"LeaveNotify" ,"FocusIn" ,"FocusOut" ,"KeymapNotify" ,"Expose" ,"GraphicsExpose"
,"NoExpose" ,"VisibilityNotify" ,"CreateNotify" ,"DestroyNotify" ,"UnmapNotify"
,"MapNotify" ,"MapRequest" ,"ReparentNotify" ,"ConfigureNotify" ,"ConfigureRequest"
,"GravityNotify" ,"ResizeRequest" ,"CirculateNotify" ,"CirculateRequest" ,"PropertyNotify"
,"SelectionClear" ,"SelectionRequest" ,"SelectionNotify" ,"ColormapNotify" ,"ClientMessage"
,"MappingNotify"};
void
prima_handle_event( XEvent *ev, XEvent *next_event)
{
XWindow win;
Handle self;
Bool was_sent;
Event e, secondary;
PDrawableSysData selfxx;
XButtonEvent *bev;
KeySym keysym = 0;
int cmd;
XCHECKPOINT;
if ( ev-> type == guts. shared_image_completion_event) {
prima_ximage_event( ev);
return;
}
if ( guts. message_boxes) {
struct MsgDlg * md = guts. message_boxes;
XWindow win = ev-> xany. window;
while ( md) {
if ( md-> w == win) {
prima_msgdlg_event( ev, md);
return;
}
md = md-> next;
}
}
if ( prima_guts.app_is_dead)
return;
bzero( &e, sizeof( e));
bzero( &secondary, sizeof( secondary));
/* Get a window, including special cases */
switch ( ev-> type) {
case ConfigureNotify:
case -ConfigureNotify:
win = ev-> xconfigure. window;
break;
case ReparentNotify:
win = ev-> xreparent. window;
break;
case MapNotify:
win = ev-> xmap. window;
break;
case UnmapNotify:
win = ev-> xunmap. window;
break;
case DestroyNotify:
if ( guts. clipboard_xfers &&
hash_fetch( guts. clipboard_xfers, &ev-> xdestroywindow. window, sizeof( XWindow))) {
prima_handle_selection_event( ev, ev-> xproperty. window, NULL_HANDLE);
return;
}
goto DEFAULT;
case PropertyNotify:
guts. last_time = ev-> xproperty. time;
if ( guts. clipboard_xfers) {
Handle value;
ClipboardXferKey key;
CLIPBOARD_XFER_KEY( key, ev-> xproperty. window, ev-> xproperty. atom);
value = ( Handle) hash_fetch( guts. clipboard_xfers, key, sizeof( key));
if ( value) {
prima_handle_selection_event( ev, ev-> xproperty. window, value);
return;
}
}
goto DEFAULT;
DEFAULT:
default:
win = ev-> xany. window;
}
/* possibly skip this event */
if ( next_event) {
if (next_event-> type == ev-> type
&& ev-> type == MotionNotify
&& win == next_event-> xany. window) {
guts. skipped_events++;
return;
} else if ( ev-> type == KeyRelease
&& next_event-> type == KeyPress
&& ev-> xkey. time == next_event-> xkey. time
&& ev-> xkey. display == next_event-> xkey. display
&& ev-> xkey. window == next_event-> xkey. window
&& ev-> xkey. root == next_event-> xkey. root
&& ev-> xkey. subwindow == next_event-> xkey. subwindow
&& ev-> xkey. x == next_event-> xkey. x
&& ev-> xkey. y == next_event-> xkey. y
&& ev-> xkey. state == next_event-> xkey. state
&& ev-> xkey. keycode == next_event-> xkey. keycode) {
guts. skipped_events++;
return;
}
}
if ( win == guts. root && guts. grab_redirect)
win = guts. grab_redirect;
self = prima_xw2h( win);
if ( ev-> type > 0)
Edebug("event: %d:%s of %s\n", ev-> type,
((ev-> type >= LASTEvent) ? "?" : xevdefs[ev-> type]),
self ? PWidget(self)-> name : "(NULL)");
if (!self)
return;
if ( XT_IS_MENU(X(self))) {
prima_handle_menu_event( ev, win, self);
return;
}
e. gen. source = self;
secondary. gen. source = self;
XX = X(self);
was_sent = ev-> xany. send_event;
switch ( ev-> type) {
case KeyPress:
if (guts.xdnds_widget) {
char str_buf[ 256];
KeySym keysym = 0;
( run in 1.010 second using v1.01-cache-2.11-cpan-2398b32b56e )