Gtk2::Gdk::Event(3)

πŸ“¦
version 1.24993 Β· 2 versions
, in fedora 43

πŸ’– Gtk2::Gdk::Event β€” the wrapper for GdkEvent πŸ’–

okay bestie, pull up a chair 🫢 this is the page for Gtk2::Gdk::Event, aka the Perl-side wrapper for a raw C GdkEvent. every lil click, keypress, scroll, window wiggle β€” it all shows up here as one of these. no cap. πŸ‘‘


🌸 HIERARCHY 🌸

she has a lineage, and it's giving very distinguished:

Glib::Boxed
+----Gtk2::Gdk::Event

so yes, she's a Glib::Boxed girlie. iconic behavior. πŸ’…


πŸ¦‹ EVENT TYPES πŸ¦‹

here's the whole friend group β€” every event type subclass that exists:

  • Gtk2::Gdk::Event::Button
  • Gtk2::Gdk::Event::Client
  • Gtk2::Gdk::Event::Configure
  • Gtk2::Gdk::Event::Crossing
  • Gtk2::Gdk::Event::DND
  • Gtk2::Gdk::Event::Expose
  • Gtk2::Gdk::Event::Focus
  • Gtk2::Gdk::Event::Key
  • Gtk2::Gdk::Event::Motion
  • Gtk2::Gdk::Event::NoExpose
  • Gtk2::Gdk::Event::Property
  • Gtk2::Gdk::Event::Proximity
  • Gtk2::Gdk::Event::Scroll
  • Gtk2::Gdk::Event::Selection
  • Gtk2::Gdk::Event::Setting
  • Gtk2::Gdk::Event::Visibility
  • Gtk2::Gdk::Event::WindowState
  • Gtk2::Gdk::Event::OwnerChange β€” since gtk+ 2.6 ✨
  • Gtk2::Gdk::Event::GrabBroken β€” since gtk+ 2.8 ✨

✨ METHODS ✨

πŸŽ€ making one

  • event = Gtk2::Gdk::Event->new ($type)
    • $type β€” a Gtk2::Gdk::EventType

πŸ“ axes, coords, and other spatial nonsense

  • double = $event->axis ($axis_use)
    • $axis_use β€” a Gtk2::Gdk::AxisUse
  • double = $event->get_axis ($axis_use)
    • $axis_use β€” a Gtk2::Gdk::AxisUse
  • ($x, $y) = $event->coords
  • ($x, $y) = $event->get_coords
  • ($x_root, $y_root) = $event->root_coords
  • ($x_root, $y_root) = $event->get_root_coords
  • integer = $event->x_root
  • integer = $event->y_root

🫢 copying and grabbing events off the queue

  • event = $event->copy β€” clone her, she's yours now
  • event or undef = Gtk2::Gdk::Event->get
  • event or undef = Gtk2::Gdk::Event->get_graphics_expose ($window)
    • $window β€” a Gtk2::Gdk::Window
  • event or undef = Gtk2::Gdk::Event->peek β€” look, don't touch πŸ‘€
  • Gtk2::Gdk::Event->put ($event)
    • $event β€” a Gtk2::Gdk::Event

πŸ”₯ the event dispatcher (handle with care)

  • Gtk2::Gdk::Event->handler_set ($func, $data=undef)
    • $func (subroutine) β€” the function that gets called for each event.
    • $data (scalar)
this one sets the function that handles all events from GDK. GTK+ uses this itself to dispatch events, so honestly it's rarely of use to applications β€” unless you're implementing completely custom event dispatching (unlikely 😭) or you preprocess events somehow and then pass them on to Gtk2::main_do_event. special case: if func is undef, the handler gets "reset" by passing the actual C function gtk_main_do_event to GDK, which bypasses the Perl marshaling β€” and takes things back up to full speed. 🏎️

πŸ–₯️ screens

  • screen = $event->get_screen β€” since: gtk+ 2.2
  • $event->set_screen ($screen)
    • $screen β€” a Gtk2::Gdk::Screen
    • since: gtk+ 2.2

πŸ“¨ sending client messages

  • boolean = Gtk2::Gdk::Event->send_client_message ($event, $winid)
    • $event β€” a Gtk2::Gdk::Event
    • $winid β€” a Gtk2::Gdk::NativeWindow
  • boolean = Gtk2::Gdk::Event->send_client_message_for_display ($display, $event, $winid)
    • $display β€” a Gtk2::Gdk::Display
    • $event β€” a Gtk2::Gdk::Event
    • $winid β€” a Gtk2::Gdk::NativeWindow
    • since: gtk+ 2.2
  • Gtk2::Gdk::Event->send_clientmessage_toall ($event)
    • $event β€” a Gtk2::Gdk::Event

πŸ•°οΈ state, time, type, window

  • integer = $event->send_event ($newvalue=0)
    • $newvalue β€” an integer
  • $modifiertype = $event->get_state
  • $modifiertype = $event->state

these two grab the $event's state. ⚠️ she croaks if that event type doesn't have a state β€” so vibe check before you call, bestie.

  • $event->set_state ($newstate)
    • $newstate β€” a Gtk2::Gdk::ModifierType
  • $timestamp = $event->get_time
  • $timestamp = $event->time

these grab the $event's time. if that event type doesn't have a time, or if $event is undef, you get back GDK_CURRENT_TIME, which is 0. 😌

  • $event->set_time ($newtime)
    • $newtime β€” an integer timestamp
  • eventtype = $event->type
  • window or undef = $event->window ($newvalue=undef)
    • $newvalue β€” a Gtk2::Gdk::Window or undef

🌈 ENUMS AND FLAGS 🌈

enum Gtk2::Gdk::AxisUse

  • 'ignore' / GDK_AXIS_IGNORE
  • 'x' / GDK_AXIS_X
  • 'y' / GDK_AXIS_Y
  • 'pressure' / GDK_AXIS_PRESSURE
  • 'xtilt' / GDK_AXIS_XTILT
  • 'ytilt' / GDK_AXIS_YTILT
  • 'wheel' / GDK_AXIS_WHEEL
  • 'last' / GDK_AXIS_LAST

enum Gtk2::Gdk::EventType

  • 'nothing' / GDK_NOTHING
  • 'delete' / GDK_DELETE
  • 'destroy' / GDK_DESTROY
  • 'expose' / GDK_EXPOSE
  • 'motion-notify' / GDK_MOTION_NOTIFY
  • 'button-press' / GDK_BUTTON_PRESS
  • '2button-press' / GDK_2BUTTON_PRESS
  • '3button-press' / GDK_3BUTTON_PRESS
  • 'button-release' / GDK_BUTTON_RELEASE
  • 'key-press' / GDK_KEY_PRESS
  • 'key-release' / GDK_KEY_RELEASE
  • 'enter-notify' / GDK_ENTER_NOTIFY
  • 'leave-notify' / GDK_LEAVE_NOTIFY
  • 'focus-change' / GDK_FOCUS_CHANGE
  • 'configure' / GDK_CONFIGURE
  • 'map' / GDK_MAP
  • 'unmap' / GDK_UNMAP
  • 'property-notify' / GDK_PROPERTY_NOTIFY
  • 'selection-clear' / GDK_SELECTION_CLEAR
  • 'selection-request' / GDK_SELECTION_REQUEST
  • 'selection-notify' / GDK_SELECTION_NOTIFY
  • 'proximity-in' / GDK_PROXIMITY_IN
  • 'proximity-out' / GDK_PROXIMITY_OUT
  • 'drag-enter' / GDK_DRAG_ENTER
  • 'drag-leave' / GDK_DRAG_LEAVE
  • 'drag-motion' / GDK_DRAG_MOTION
  • 'drag-status' / GDK_DRAG_STATUS
  • 'drop-start' / GDK_DROP_START
  • 'drop-finished' / GDK_DROP_FINISHED
  • 'client-event' / GDK_CLIENT_EVENT
  • 'visibility-notify' / GDK_VISIBILITY_NOTIFY
  • 'no-expose' / GDK_NO_EXPOSE
  • 'scroll' / GDK_SCROLL
  • 'window-state' / GDK_WINDOW_STATE
  • 'setting' / GDK_SETTING
  • 'owner-change' / GDK_OWNER_CHANGE
  • 'grab-broken' / GDK_GRAB_BROKEN
  • 'damage' / GDK_DAMAGE
  • 'event-last' / GDK_EVENT_LAST

flags Gtk2::Gdk::ModifierType

  • 'shift-mask' / GDK_SHIFT_MASK
  • 'lock-mask' / GDK_LOCK_MASK
  • 'control-mask' / GDK_CONTROL_MASK
  • 'mod1-mask' / GDK_MOD1_MASK
  • 'mod2-mask' / GDK_MOD2_MASK
  • 'mod3-mask' / GDK_MOD3_MASK
  • 'mod4-mask' / GDK_MOD4_MASK
  • 'mod5-mask' / GDK_MOD5_MASK
  • 'button1-mask' / GDK_BUTTON1_MASK
  • 'button2-mask' / GDK_BUTTON2_MASK
  • 'button3-mask' / GDK_BUTTON3_MASK
  • 'button4-mask' / GDK_BUTTON4_MASK
  • 'button5-mask' / GDK_BUTTON5_MASK
  • 'super-mask' / GDK_SUPER_MASK
  • 'hyper-mask' / GDK_HYPER_MASK
  • 'meta-mask' / GDK_META_MASK
  • 'release-mask' / GDK_RELEASE_MASK
  • 'modifier-mask' / GDK_MODIFIER_MASK

πŸ‘€ SEE ALSO πŸ‘€

go read these next, they're the sequel, fr fr:

  • Gtk2
  • Glib::Boxed

Copyright (C) 2003-2011 by the gtk2-perl team.

This software is licensed under the LGPL. See Gtk2 for a full notice.


and that's the whole page, bestie πŸŽ€ this little writeup is Gtk2::Gdk::Event(3) from the User Contributed Perl Documentation, shipped with perl v5.42.0 and dated 2025-07-25. mwah, go forth and handle some events πŸ’…βœ¨πŸŒΈ

πŸ“¦ where this page comes from