You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

change_i3pystatus.py 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. from i3pystatus.core import CommandEndpoint
  2. from i3pystatus.network import Network
  3. from i3pystatus.clock import Clock
  4. from gi.repository import Gtk
  5. import subprocess
  6. import sys
  7. import psutil
  8. import os
  9. import traceback
  10. ###############################################################################
  11. # Tools
  12. ###############################################################################
  13. g_i3bar_size = 20
  14. def exec(s):
  15. p = subprocess.Popen(s.split(), stdout=sys.stderr.buffer)
  16. return p.pid
  17. def check_pid(pid):
  18. if psutil.pid_exists(pid):
  19. proc = psutil.Process(pid)
  20. if proc.status() == psutil.STATUS_ZOMBIE:
  21. os.kill(pid, 2)
  22. return False
  23. return True
  24. return False
  25. def get_current_screen_size(x, y):
  26. screen = Gtk.Window().get_screen()
  27. mn_number = screen.get_monitor_at_point(x, y)
  28. return screen.get_monitor_geometry(mn_number)
  29. ###############################################################################
  30. # Command end point
  31. ###############################################################################
  32. def change_command_end_point():
  33. """ We create a modified version of _command_endpoint that add the support
  34. of x and y"""
  35. def _command_endpoint(self):
  36. for command in self.io_handler_factory().read():
  37. target_module = self.modules.get(command["instance"])
  38. if target_module:
  39. try:
  40. target_module._pos_x = int(command["x"])
  41. target_module._pos_y = int(command["y"])
  42. target_module.on_click(command["button"])
  43. except Exception:
  44. continue
  45. CommandEndpoint._command_endpoint = _command_endpoint
  46. ###############################################################################
  47. # Clock
  48. ###############################################################################
  49. def change_clock():
  50. def display_calendar(quit, s):
  51. if "_pid" in s.__dict__ and check_pid(s._pid):
  52. return
  53. x, y = s._pos_x, s._pos_y
  54. width_calendar, height_calendar = 300, 210 # fixed values...
  55. rect = get_current_screen_size(x, y)
  56. x = rect.width + rect.x - width_calendar
  57. if (y < g_i3bar_size):
  58. y = rect.y + g_i3bar_size
  59. else:
  60. y = rect.height + rect.y - height_calendar - g_i3bar_size
  61. s._pid = exec("calendar-window --size=%d-%d --position=%d-%d "
  62. "--onLostFocus=%s" % (width_calendar, height_calendar,
  63. x, y, "quit" if quit else "ignore"))
  64. def display_calendar_quit(s):
  65. display_calendar(True, s)
  66. def display_calendar_ignore(s):
  67. display_calendar(False, s)
  68. Clock.display_calendar = display_calendar_quit
  69. Clock.on_leftclick = display_calendar_quit
  70. Clock.on_rightclick = display_calendar_ignore
  71. ###############################################################################
  72. # Network
  73. ###############################################################################
  74. def change_network():
  75. # We create the switch function
  76. def switch_hide(s):
  77. s.format_up, s.format_up_hide = s.format_up_hide, s.format_up
  78. s.format_down, s.format_down_hide = s.format_down_hide, s.format_down
  79. # We add it to the module
  80. Network.switch_hide = switch_hide
  81. # We add the correct settings and we init everything properly
  82. Network.format_up_hide = Network.format_up
  83. Network.format_down_hide = Network.format_down
  84. Network.on_leftclick = switch_hide
  85. Network.settings += (("format_down_hide", ""),)
  86. Network.settings += (("format_up_hide", ""),)
  87. # We change the mouse control
  88. Network.format_up_hide = Network.format_up
  89. Network.on_rightclick = Network.on_leftclick
  90. Network.on_upscroll = Network.on_leftclick
  91. Network.on_downscroll = Network.on_leftclick
  92. ###############################################################################
  93. # Change that we apply
  94. ###############################################################################
  95. def change_all():
  96. change_command_end_point()
  97. change_clock()
  98. change_network()