Module: Libnotify::FFI

Extended by:
FFI::Library
Included in:
API
Defined in:
lib/libnotify/ffi.rb

Overview

Raw FFI bindings.

Constant Summary

URGENCY =
[ :low, :normal, :critical ]

Class Method Summary (collapse)

Instance Method Summary (collapse)

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

- (Object) method_missing(method, *args, &block)



48
49
50
51
52
53
54
# File 'lib/libnotify/ffi.rb', line 48

def method_missing(method, *args, &block)
  if method.to_s =~ /^notify_/
    warn "libnotify.so not found!"
  end

  super
end

Class Method Details

+ (Object) attach_functions!



30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/libnotify/ffi.rb', line 30

def self.attach_functions!
  attach_function :notify_init,                         [:string],                              :bool
  attach_function :notify_uninit,                       [],                                     :void
  attach_function :notify_notification_new,             [:string, :string, :string, :pointer],  :pointer
  attach_function :notify_notification_update,          [:pointer, :string, :string, :string, :pointer],  :pointer
  attach_function :notify_notification_set_urgency,     [:pointer, :int],                       :void
  attach_function :notify_notification_set_timeout,     [:pointer, :long],                      :void
  attach_function :notify_notification_set_hint_string, [:pointer, :string, :string],           :void
  attach_function :notify_notification_set_hint_uint32, [:pointer, :string, :int],              :void
  attach_function :notify_notification_clear_hints,     [:pointer],                             :void
  attach_function :notify_notification_show,            [:pointer, :pointer],                   :bool
  attach_function :notify_notification_close,           [:pointer, :pointer],                   :bool
end

+ (Object) included(base)



7
8
9
10
11
12
# File 'lib/libnotify/ffi.rb', line 7

def self.included(base)
  load_libs
  attach_functions!
rescue LoadError => e
  warn e.message
end

+ (Object) load_libs



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/libnotify/ffi.rb', line 14

def self.load_libs
  libnotify_libs = %w[libnotify libnotify.so.4 libnotify.so.3 libnotify.so.2 libnotify.so.1 libnotify.so]

  # Workaround for "half-linked" libnotify.so. Does not work on rubinius (no ffi_lib_flags there)!
  # See: https://bugzilla.redhat.com/show_bug.cgi?id=626852
  ffi_lib_flags :lazy, :local, :global if respond_to?(:ffi_lib_flags)
  ffi_lib libnotify_libs

rescue LoadError
  ffi_lib %w[libgtk-x11-2.0 libgtk-x11-2.0.so.0 libgtk-x11-2.0.so libgtk-3 libgtk-3.so.0 libgtk-3.so],
          %w[libgtkmm-2.4 libgtkmm-2.4.so.1 libgtkmm-2.4.so libgtkmm-3.0 libgtkmm-3.0.so.1 libgtkmm-3.0.so],
          libnotify_libs
end

Instance Method Details

- (Object) lookup_urgency(urgency)



44
45
46
# File 'lib/libnotify/ffi.rb', line 44

def lookup_urgency(urgency)
  URGENCY.index(urgency)
end