Class: Volay::Widget::SystemTray

Inherits:
Events
  • Object
show all
Defined in:
lib/volay/widget/system_tray.rb

Overview

Events class

Constant Summary collapse

LEFT_CLICK =
1
RIGHT_CLICK =
3
M_KEYCODE =
47

Instance Attribute Summary

Attributes inherited from Events

#app

Instance Method Summary collapse

Methods inherited from Events

#initialize

Constructor Details

This class inherits a constructor from Volay::Widget::Events

Instance Method Details

#get_position(window) ⇒ Object

Retrieve the good position to be above the status icon

Parameters:

  • Window



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/volay/widget/system_tray.rb', line 71

def get_position(window)
  _e, screen, rectangle, orientation = @app.get_object('status_icon')
                                           .geometry
  window.set_screen(screen)
  monitor_num = screen.get_monitor_at_point(rectangle.x, rectangle.y)
  monitor = screen.get_monitor_geometry(monitor_num)
  window_width, window_height = window.size

  if orientation == Gtk::Orientation::VERTICAL
    if monitor.width - rectangle.x == rectangle.width
      # right panel
      posx = monitor.x + monitor.width - window_width - rectangle.width
    else
      # left panel
      posx = rectangle.x + rectangle.width
      posy = rectangle.y
    end
  else
    total = rectangle.y + rectangle.height + window_height
    if total <= monitor.y + monitor.height
      posy = rectangle.y + rectangle.height
    else
      posy = rectangle.y - window_height
      posx = if rectangle.x + window_width <= monitor.x + monitor.width
               rectangle.x
             else
               monitor.x + monitor.width - window_width
             end
    end
  end

  [posx, posy]
end

#on_popup_menu_quit_activateObject

When quit button is clicked



61
62
63
# File 'lib/volay/widget/system_tray.rb', line 61

def on_popup_menu_quit_activate
  Gtk.main_quit
end

#on_status_icon_button_press_event(_widget, event) ⇒ Object

When left click on the status icon, popup the window menu

Parameters:

  • Widget

  • Event



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/volay/widget/system_tray.rb', line 17

def on_status_icon_button_press_event(_widget, event)
  return unless event.is_a?(Gdk::EventButton) &&
                event.button == LEFT_CLICK
  return on_system_tray_window_focus_out_event if
    @app.get_object('system_tray_window').visible?

  window = @app.get_object('system_tray_window')
  posx, posy = get_position(window)
  window.move(posx, posy)
  @app.get_object('system_tray_window').show_all
end

#on_status_icon_popup_menu(_widget, _event, time) ⇒ Object

When right click on the status icon

Parameters:

  • Widget

  • Event

  • Time



52
53
54
55
56
# File 'lib/volay/widget/system_tray.rb', line 52

def on_status_icon_popup_menu(_widget, _event, time)
  popup_menu = @app.get_object('popup_menu')
  popup_menu.show_all
  popup_menu.popup(nil, nil, 0, time)
end

#on_system_tray_window_focus_out_eventObject

When click outside the window



32
33
34
# File 'lib/volay/widget/system_tray.rb', line 32

def on_system_tray_window_focus_out_event
  @app.get_object('system_tray_window').hide
end

#on_system_tray_window_key_release_event(_widget, event) ⇒ Object

Check for M keycode to toggle mute



39
40
41
42
43
44
# File 'lib/volay/widget/system_tray.rb', line 39

def on_system_tray_window_key_release_event(_widget, event)
  return unless event.is_a?(Gdk::EventKey) &&
                event.hardware_keycode == M_KEYCODE
  @app.mixer.toggle
  @app.utils.update_status_icon
end