Module: Gtk

Defined in:
lib/baffle/gtk_queue.rb

Constant Summary collapse

GTK_PENDING_BLOCKS =
[]
GTK_PENDING_BLOCKS_LOCK =
Monitor.new

Class Method Summary collapse

Class Method Details

.main_with_queue(timeout = 100) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/baffle/gtk_queue.rb', line 17

def Gtk.main_with_queue(timeout=100)
  Gtk.timeout_add(timeout) do
    GTK_PENDING_BLOCKS_LOCK.synchronize do
      GTK_PENDING_BLOCKS.each { |block| block.call }
      GTK_PENDING_BLOCKS.clear
    end
    
    true
  end
  
  Gtk.main
end

.queue(&block) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/baffle/gtk_queue.rb', line 7

def Gtk.queue(&block)
  if Thread.current == Thread.main
    block.call
  else
    GTK_PENDING_BLOCKS_LOCK.synchronize do
      GTK_PENDING_BLOCKS << block
    end
  end
end