pike.git / src / post_modules / GTK2 / source / gdkevent.pre

version» Context lines:

pike.git/src/post_modules/GTK2/source/gdkevent.pre:1: + /* -*- C -*- */ + class GDK2.Event;    -  + //! Gdk events. +  + %{ + #define GTK_GDKEVENT(X) ((GdkEvent *)X) +  + #define RETURN_NIL() do{ pgtk2_pop_n_elems( args );push_undefined();return; } while(0) + #define RETURN_INT(X) do { pgtk2_pop_n_elems( args );push_int( X ); return; } while(0) + #define RETURN_FLOAT(X) do { pgtk2_pop_n_elems( args );push_float( X ); return; } while(0) + #define REF_RETURN_STRING(X) do { pgtk2_pop_n_elems( args );ref_push_string( X ); return; } while(0) + #define RETURN_STRING(X) do { pgtk2_pop_n_elems( args );push_string( X ); return; } while(0) + #define RETURN_ATOM(X) do { pgtk2_pop_n_elems( args );push_atom( X ); return; } while(0) +  + static int last_event_time; + int pgtk2_last_event_time() + { +  return last_event_time; + } + %} +  + void destroy() + { +  if( THIS->obj && THIS->owned ) +  g_free( THIS->obj ); +  THIS->obj = 0; +  pgtk2_pop_n_elems(args); +  push_int(0); + } +  + mixed _index(string ind) + //! Return an index. + { +  struct pike_string *index; +  GdkEvent *e = (GdkEvent *)THIS->obj; +  if(!e) Pike_error("No event\n"); +  get_all_args( "`[]", args, "%S", &index ); +  last_event_time = gdk_event_get_time( e ); +  +  switch( e->type ) +  { +  case GDK_NOTHING: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("nothing")); +  break; +  case GDK_DELETE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("delete")); +  break; +  case GDK_DESTROY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("destroy")); +  break; +  +  case GDK_EXPOSE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("expose")); +  if( is_same_string(index,_STR("count")) ) RETURN_INT( e->expose.count ); +  if( is_same_string(index,_STR("x")) ) RETURN_INT( e->expose.area.x ); +  if( is_same_string(index,_STR("y")) ) RETURN_INT( e->expose.area.y ); +  if( is_same_string(index,_STR("width")) ) RETURN_INT( e->expose.area.width ); +  if( is_same_string(index,_STR("height")) ) RETURN_INT( e->expose.area.height ); +  break; +  +  case GDK_MOTION_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("motion")); +  if( is_same_string(index,_STR("x")) ) RETURN_FLOAT( e->motion.x ); +  if( is_same_string(index,_STR("y")) ) RETURN_FLOAT( e->motion.y ); +  if( is_same_string(index,_STR("x_root")) ) RETURN_FLOAT( e->motion.x_root ); +  if( is_same_string(index,_STR("y_root")) ) RETURN_FLOAT( e->motion.y_root ); +  if( is_same_string(index,_STR("state")) ) RETURN_INT( e->motion.state ); + /* if( index == s_xtilt ) RETURN_FLOAT( e->motion.xtilt ); */ + /* if( index == s_ytilt ) RETURN_FLOAT( e->motion.ytilt ); */ + /* if( index == s_pressure ) RETURN_FLOAT( e->motion.pressure ); */ + /* if( index == s_deviceid ) RETURN_INT( e->motion.deviceid ); */ +  break; +  +  case GDK_BUTTON_PRESS: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("button_press")); +  case GDK_BUTTON_RELEASE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("button_release")); +  case GDK_2BUTTON_PRESS: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("2button_press")); +  case GDK_3BUTTON_PRESS: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("3button_press")); +  if( is_same_string(index,_STR("x")) ) RETURN_FLOAT(e->button.x); +  if( is_same_string(index,_STR("y")) ) RETURN_FLOAT(e->button.y); + /* if( index == s_pressure ) RETURN_FLOAT(e->button.pressure); */ + /* if( index == s_xtilt ) RETURN_FLOAT(e->button.xtilt); */ + /* if( index == s_ytilt ) RETURN_FLOAT(e->button.ytilt); */ + /* if( index == s_deviceid ) RETURN_INT(e->button.deviceid); */ +  if( is_same_string(index,_STR("state")) ) RETURN_INT(e->button.state); +  if( is_same_string(index,_STR("button")) ) RETURN_INT(e->button.button); +  if( is_same_string(index,_STR("x_root")) ) RETURN_FLOAT(e->button.x_root); +  if( is_same_string(index,_STR("y_root")) ) RETURN_FLOAT(e->button.y_root); +  break; +  +  case GDK_KEY_PRESS: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("key_press")); +  case GDK_KEY_RELEASE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("key_release")); +  if( is_same_string(index,_STR("state")) ) RETURN_INT(e->key.state); +  if( is_same_string(index,_STR("keyval")) ) RETURN_INT(e->key.keyval); +  if(e->key.string) +  if( is_same_string(index,_STR("data")) ) +  RETURN_STRING(make_shared_binary_string(e->key.string,e->key.length)); +  break; +  +  case GDK_ENTER_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("enter_notify")); +  case GDK_LEAVE_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("leave_notify")); +  if( is_same_string(index,_STR("detail")) ) RETURN_INT(e->crossing.detail); +  if( is_same_string(index,_STR("mode")) ) RETURN_INT(e->crossing.mode ); +  if( is_same_string(index,_STR("focus")) ) RETURN_INT(e->crossing.focus ); +  if( is_same_string(index,_STR("state")) ) RETURN_INT(e->crossing.state ); +  if( is_same_string(index,_STR("x_root")) ) RETURN_FLOAT(e->crossing.x_root ); +  if( is_same_string(index,_STR("y_root")) ) RETURN_FLOAT(e->crossing.y_root ); +  if( is_same_string(index,_STR("x")) ) RETURN_FLOAT(e->crossing.x ); +  if( is_same_string(index,_STR("y")) ) RETURN_FLOAT(e->crossing.y ); +  break; +  +  case GDK_FOCUS_CHANGE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("focus")); +  if( is_same_string(index,_STR("in")) ) RETURN_INT( e->focus_change.in ); +  break; +  +  case GDK_CONFIGURE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("configure")); +  case GDK_MAP: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("map")); +  case GDK_UNMAP: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("unmap")); +  if( is_same_string(index,_STR("x")) ) RETURN_INT(e->configure.x); +  if( is_same_string(index,_STR("y")) ) RETURN_INT(e->configure.y); +  if( is_same_string(index,_STR("width")) ) RETURN_INT(e->configure.width); +  if( is_same_string(index,_STR("height")) ) RETURN_INT(e->configure.height); +  break; +  +  case GDK_PROPERTY_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("property")); +  if( is_same_string(index,_STR("atom")) ) RETURN_ATOM( e->property.atom ); +  if( is_same_string(index,_STR("state")) ) RETURN_INT( e->property.state ); +  break; +  +  case GDK_SELECTION_CLEAR: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("selection_clear")); +  case GDK_SELECTION_REQUEST: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("selection_request")); +  case GDK_SELECTION_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("selection_notify")); +  if( is_same_string(index,_STR("selection")) ) RETURN_ATOM( e->selection.selection ); +  if( is_same_string(index,_STR("target")) ) RETURN_ATOM( e->selection.target ); +  if( is_same_string(index,_STR("property")) ) RETURN_ATOM( e->selection.property ); +  if( is_same_string(index,_STR("requestor")) ) RETURN_INT( e->selection.requestor ); +  break; +  +  case GDK_PROXIMITY_IN: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("proximity_in")); + /* if( index == s_deviceid ) RETURN_INT( e->proximity.deviceid ); */ +  break; +  +  case GDK_PROXIMITY_OUT: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("proximity_out")); + /* if( index == s_deviceid ) RETURN_INT( e->proximity.deviceid ); */ +  break; +  +  case GDK_CLIENT_EVENT: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("client")); +  if( is_same_string(index,_STR("message_type")) ) RETURN_ATOM( e->client.message_type ); +  if( is_same_string(index,_STR("data_format")) ) RETURN_INT(e->client.data_format); +  if( is_same_string(index,_STR("data")) ) +  { +  pop_n_elems( args ); +  switch( e->client.data_format ) +  { +  case 8: +  push_string( make_shared_binary_string( e->client.data.b, 20 ) ); +  break; +  case 16: +  push_string(make_shared_binary_string1((const p_wchar1 *)e->client.data.s, 10)); +  break; +  case 32: +  push_Xpseudo32bitstring( e->client.data.l, 5 ); +  break; +  } +  return; +  } +  break; +  +  case GDK_VISIBILITY_NOTIFY: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("visibility")); +  if( is_same_string(index,_STR("state")) ) RETURN_INT( e->visibility.state ); +  break; +  +  case GDK_NO_EXPOSE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("noexpose")); +  break; +  +  case GDK_DRAG_ENTER: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drag_enter")); +  case GDK_DRAG_LEAVE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drag_leave")); +  case GDK_DRAG_MOTION: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drag_motion")); +  case GDK_DRAG_STATUS: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drag_status")); +  case GDK_DROP_START: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drop_start")); +  case GDK_DROP_FINISHED: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("drop_finished")); +  if( is_same_string(index,_STR("send_event")) ) RETURN_INT( e->dnd.send_event ); +  if( is_same_string(index,_STR("x_root")) ) RETURN_INT( e->dnd.x_root ); +  if( is_same_string(index,_STR("y_root")) ) RETURN_INT( e->dnd.y_root ); +  if( is_same_string(index,_STR("context")) ) +  { +  pop_n_elems( args ); +  push_gdkobject( e->dnd.context, drag_context, 0); +  return; +  } +  break; +  case GDK_SCROLL: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("scroll")); +  if (is_same_string(index,_STR("x"))) RETURN_INT(e->scroll.x); +  if (is_same_string(index,_STR("y"))) RETURN_INT(e->scroll.y); +  if (is_same_string(index,_STR("direction"))) RETURN_INT(e->scroll.direction); +  if (is_same_string(index,_STR("x_root"))) RETURN_INT(e->scroll.x_root); +  if (is_same_string(index,_STR("y_root"))) RETURN_INT(e->scroll.y_root); +  +  break; +  case GDK_WINDOW_STATE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("window_state")); +  if( is_same_string(index,_STR("changed")) ) RETURN_INT(e->window_state.changed_mask); +  if( is_same_string(index,_STR("new_state")) ) RETURN_INT(e->window_state.new_window_state); +  break; +  case GDK_SETTING: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("setting")); +  if( is_same_string(index,_STR("action")) ) RETURN_INT(e->setting.action); +  if( is_same_string(index,_STR("name")) ) +  RETURN_STRING(make_shared_binary_string(e->setting.name,strlen(e->setting.name))); +  break; + #ifdef HAVE_GTK26 +  case GDK_OWNER_CHANGE: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("owner_change")); +  if( is_same_string(index,_STR("selection")) ) RETURN_ATOM(e->owner_change.selection); +  break; + #endif + #ifdef HAVE_GTK28 +  case GDK_GRAB_BROKEN: +  if( is_same_string(index,_STR("type")) ) REF_RETURN_STRING(_STR("setting")); +  if( is_same_string(index,_STR("keyboard")) ) RETURN_INT(e->grab_broken.keyboard); +  if( is_same_string(index,_STR("implicit")) ) RETURN_INT(e->grab_broken.implicit); +  break; + #endif +  } +  RETURN_NIL(); + } +  +  + string _sprintf(int flag) + { +  int mode = 0; +  if(args>0 && TYPEOF(Pike_sp[-args]) == PIKE_T_INT) +  mode = Pike_sp[-args].u.integer; +  pop_n_elems( args ); +  if(mode != 'O') { +  push_undefined(); +  return; +  } +  ref_push_string( _STR("GDK2.Event(") ); +  ref_push_string( _STR("type") ); pgdk2_event__index( 1 ); +  ref_push_string( _STR(")") ); +  f_add( 3 ); + } +  + mixed cast(string to) + //! Cast to different types. + { +  struct svalue *osp = Pike_sp-args; +  char *a; +  GdkEvent *e = (GdkEvent *)THIS->obj; +  +  if(!e) Pike_error("No event\n"); +  +  if( !args || !is_same_string(Pike_sp[-args].u.string,_STR("mapping")) ) +  Pike_error("Can only cast to mapping\n"); +  pop_n_elems( args ); +  +  switch(e->type) +  { +  case GDK_NOTHING: +  ref_push_string(_STR("type")); ref_push_string(_STR("nothing")); +  break; +  case GDK_DELETE: +  ref_push_string(_STR("type")); ref_push_string(_STR("delete")); +  break; +  case GDK_DESTROY: +  ref_push_string(_STR("type")); ref_push_string(_STR("destroy")); +  break; +  case GDK_EXPOSE: +  ref_push_string(_STR("type")); ref_push_string(_STR("expose")); +  ref_push_string(_STR("count")); push_int(e->expose.count); +  ref_push_string(_STR("x")); push_int(e->expose.area.x); +  ref_push_string(_STR("y")); push_int(e->expose.area.y); +  ref_push_string(_STR("width")); push_int(e->expose.area.width); +  ref_push_string(_STR("height")); push_int(e->expose.area.height); +  break; +  +  case GDK_MOTION_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("motion")); +  ref_push_string(_STR("x")); push_float(e->motion.x); +  ref_push_string(_STR("y")); push_float(e->motion.y); + /* ref_push_string(s_pressure);push_float(e->motion.pressure); */ + /* ref_push_string(s_xtilt); push_float(e->motion.xtilt); */ + /* ref_push_string(s_ytilt); push_float(e->motion.ytilt); */ + /* ref_push_string(s_deviceid);push_int(e->motion.deviceid); */ +  ref_push_string(_STR("state")); push_int(e->motion.state); +  ref_push_string(_STR("is_hint")); push_int(e->motion.is_hint); +  ref_push_string(_STR("x_root")); push_float(e->motion.x_root); +  ref_push_string(_STR("y_root")); push_float(e->motion.y_root); +  break; +  +  case GDK_BUTTON_PRESS: +  ref_push_string(_STR("type")); ref_push_string(_STR("button_press")); +  goto press_event; +  case GDK_2BUTTON_PRESS: +  ref_push_string(_STR("type")); ref_push_string(_STR("2button_press")); +  goto press_event; +  case GDK_3BUTTON_PRESS: +  ref_push_string(_STR("type")); ref_push_string(_STR("3button_press")); +  goto press_event; +  case GDK_BUTTON_RELEASE: +  ref_push_string(_STR("type")); ref_push_string(_STR("button_release")); +  +  press_event: +  ref_push_string(_STR("time")); push_int(e->button.time); +  ref_push_string(_STR("x")); push_float(e->button.x); +  ref_push_string(_STR("y")); push_float(e->button.y); + /* ref_push_string(s_pressure);push_float(e->button.pressure); */ + /* ref_push_string(s_xtilt); push_float(e->button.xtilt); */ + /* ref_push_string(s_ytilt); push_float(e->button.ytilt); */ + /* ref_push_string(s_deviceid);push_int(e->button.deviceid); */ +  ref_push_string(_STR("state")); push_int(e->button.state); +  ref_push_string(_STR("button")); push_int(e->button.button); +  ref_push_string(_STR("x_root")); push_float(e->button.x_root); +  ref_push_string(_STR("y_root")); push_float(e->button.y_root); +  break; +  +  case GDK_KEY_PRESS: +  ref_push_string(_STR("type")); ref_push_string(_STR("key_press")); +  goto key_event; +  +  case GDK_KEY_RELEASE: +  ref_push_string(_STR("type")); ref_push_string(_STR("key_release")); +  key_event: +  ref_push_string(_STR("time")); push_int(e->key.time); +  ref_push_string(_STR("state")); push_int(e->key.state); +  ref_push_string(_STR("keyval")); push_int(e->key.keyval); +  if(e->key.string) +  { +  ref_push_string(_STR("data")); +  push_string(make_shared_binary_string(e->key.string, e->key.length)); +  } +  break; +  +  case GDK_ENTER_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("enter_notify")); +  goto enter_event; +  +  case GDK_LEAVE_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("leave_notify")); +  enter_event: +  ref_push_string(_STR("detail")); push_int(e->crossing.detail); +  ref_push_string(_STR("mode")); push_int(e->crossing.mode ); +  ref_push_string(_STR("focus")); push_int(e->crossing.focus ); +  ref_push_string(_STR("state")); push_int(e->crossing.state ); +  ref_push_string(_STR("x_root")); push_float(e->crossing.x_root ); +  ref_push_string(_STR("y_root")); push_float(e->crossing.y_root ); +  ref_push_string(_STR("x")); push_float(e->crossing.x ); +  ref_push_string(_STR("y")); push_float(e->crossing.y ); +  break; +  +  case GDK_FOCUS_CHANGE: +  ref_push_string(_STR("type")); ref_push_string(_STR("focus")); +  ref_push_string(_STR("in")); push_int( e->focus_change.in ); +  break; +  +  case GDK_CONFIGURE: +  ref_push_string(_STR("type")); ref_push_string(_STR("configure")); +  goto configure_event; +  +  case GDK_MAP: +  ref_push_string(_STR("type")); ref_push_string(_STR("map")); +  goto configure_event; +  +  case GDK_UNMAP: +  ref_push_string(_STR("type")); ref_push_string(_STR("unmap")); +  configure_event: +  ref_push_string(_STR("x")); push_int(e->configure.x); +  ref_push_string(_STR("y")); push_int(e->configure.x); +  ref_push_string(_STR("width")); push_int(e->configure.width); +  ref_push_string(_STR("height")); push_int(e->configure.height); +  break; +  +  case GDK_PROPERTY_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("property")); +  ref_push_string(_STR("atom")); push_atom( e->property.atom ); +  ref_push_string(_STR("state")); push_int( e->property.state ); +  break; +  +  case GDK_SELECTION_CLEAR: +  ref_push_string(_STR("type")); ref_push_string(_STR("selection_clear")); +  goto selection_event; +  +  case GDK_SELECTION_REQUEST: +  ref_push_string(_STR("type")); ref_push_string(_STR("selection_request")); +  goto selection_event; +  +  case GDK_SELECTION_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("selection_notify")); +  selection_event: +  ref_push_string(_STR("selection")); push_atom( e->selection.selection ); +  ref_push_string(_STR("target")); push_atom( e->selection.target ); +  ref_push_string(_STR("property")); push_atom( e->selection.property ); +  ref_push_string(_STR("requestor")); push_int( e->selection.requestor ); +  break; +  +  case GDK_PROXIMITY_IN: +  ref_push_string(_STR("type")); ref_push_string(_STR("proximity_in")); + /* ref_push_string(s_deviceid ); push_int( e->proximity.deviceid ); */ +  break; +  case GDK_PROXIMITY_OUT: +  ref_push_string(_STR("type")); ref_push_string(_STR("proximity_out")); + /* ref_push_string(s_deviceid ); push_int( e->proximity.deviceid ); */ +  break; +  +  case GDK_CLIENT_EVENT: +  ref_push_string(_STR("type")); ref_push_string(_STR("client")); +  ref_push_string(_STR("message_type")); +  push_atom( e->client.message_type ); +  ref_push_string(_STR("data_format")); push_int(e->client.data_format); +  ref_push_string(_STR("data")); +  switch( e->client.data_format ) +  { +  case 8: +  push_string( make_shared_binary_string( e->client.data.b, 20 ) ); +  break; +  case 16: +  push_string(make_shared_binary_string1((const p_wchar1 *)e->client.data.s, 10)); +  break; +  case 32: +  push_Xpseudo32bitstring( e->client.data.l, 5 ); +  break; +  } +  break; +  +  case GDK_VISIBILITY_NOTIFY: +  ref_push_string(_STR("type")); ref_push_string(_STR("visibility")); +  ref_push_string(_STR("state")); push_int( e->visibility.state ); +  break; +  +  case GDK_NO_EXPOSE: +  ref_push_string(_STR("type")); ref_push_string(_STR("noexpose")); +  break; +  +  +  case GDK_DRAG_ENTER: +  ref_push_string(_STR("type")); ref_push_string(_STR("drag_enter")); +  goto dnd_event; +  case GDK_DRAG_LEAVE: +  ref_push_string(_STR("type")); ref_push_string(_STR("drag_leave")); +  goto dnd_event; +  case GDK_DRAG_MOTION: +  ref_push_string(_STR("type")); ref_push_string(_STR("drag_motion")); +  goto dnd_event; +  case GDK_DRAG_STATUS: +  ref_push_string(_STR("type")); ref_push_string(_STR("drag_status")); +  goto dnd_event; +  case GDK_DROP_START: +  ref_push_string(_STR("type")); ref_push_string(_STR("drop_start")); +  goto dnd_event; +  case GDK_DROP_FINISHED: +  ref_push_string(_STR("type")); ref_push_string(_STR("drop_finished")); +  dnd_event: +  ref_push_string(_STR("send_event")); push_int( e->dnd.send_event ); +  ref_push_string(_STR("x_root")); push_int( e->dnd.x_root ); +  ref_push_string(_STR("y_root")); push_int( e->dnd.y_root ); +  ref_push_string(_STR("context"));push_gdkobject( e->dnd.context, drag_context, 0); +  break; +  +  } +  f_aggregate_mapping( Pike_sp - osp ); + } +  +  +  +    Newline at end of file added.