Esempio n. 1
0
  def __init__(self, ekrano, *args, **kwargs):
    super().__init__(*args,
                     application_id="io.ekrano",
                     flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                     **kwargs)
    self.ekrano = ekrano
    self.resource_path = path.join(path.dirname(path.abspath(__file__)), "share")

    self.builder = Gtk.Builder()
    self.builder.add_from_file(path.join(self.resource_path, "app.glade"))

    self.session = Session()
    self.session.closed.connect(self.on_screenshot_closed)
    self.window = None

    self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)

    self.register_action("quit", self.on_quit)
    self.register_action("close", self.on_close)
    self.register_action("copy", self.on_copy)

    self.add_main_option("hidden", ord("h"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Do not take any screenshots."), None)
    self.add_main_option("selection", ord("s"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of a selection."), None)
    self.add_main_option("active", ord("a"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of the active (focused) window."), None)
    self.add_main_option("window", ord("w"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of any window."), None)
    self.add_main_option("output", ord("o"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.STRING, _("Output filename."), None)
Esempio n. 2
0
class Application(Gtk.Application):
  def __init__(self, ekrano, *args, **kwargs):
    super().__init__(*args,
                     application_id="io.ekrano",
                     flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                     **kwargs)
    self.ekrano = ekrano
    self.resource_path = path.join(path.dirname(path.abspath(__file__)), "share")

    self.builder = Gtk.Builder()
    self.builder.add_from_file(path.join(self.resource_path, "app.glade"))

    self.session = Session()
    self.session.closed.connect(self.on_screenshot_closed)
    self.window = None

    self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)

    self.register_action("quit", self.on_quit)
    self.register_action("close", self.on_close)
    self.register_action("copy", self.on_copy)

    self.add_main_option("hidden", ord("h"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Do not take any screenshots."), None)
    self.add_main_option("selection", ord("s"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of a selection."), None)
    self.add_main_option("active", ord("a"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of the active (focused) window."), None)
    self.add_main_option("window", ord("w"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.NONE, _("Capture a screenshot of any window."), None)
    self.add_main_option("output", ord("o"), GLib.OptionFlags.NONE,
                         GLib.OptionArg.STRING, _("Output filename."), None)

  def activate(self):
    if not self.window:
      self.window = self.get_object("app_window")
      self.session_view = SessionView(self.session, self.get_object("notebook"))
      self.window.show_all()

    self.add_window(self.window)

  def get_object(self, object_name):
    return self.builder.get_object(object_name)

  def ensure_invisible(self):
    if self.window:
      self.window.iconify()

  def register_action(self, name, callback):
    action = Gio.SimpleAction.new(name, None)
    action.connect("activate", callback)
    self.add_action(action)

  def take_screenshot(self, screenshot):
    self.ensure_invisible()

    try:
      screenshot = capture(screenshot)
      self.display_screenshot(screenshot)
    except CaptureError as err:
      self.show_message_dialog(_("Failed to capture screenshot"), str(err), Gtk.MessageType.ERROR, Gtk.ButtonsType.OK)
      return 1

  def display_screenshot(self, screenshot):
    self.window.deiconify()
    self.window.present()
    self.session.add(screenshot)

  def show_message_dialog(self, title, text, type, buttons):
    dialog = Gtk.MessageDialog(self.window, 0, type,
        buttons, title)
    dialog.format_secondary_text(text)
    dialog.run()
    dialog.destroy()

  def get_setting(self, path):
    return self.ekrano.settings.get(path)

  def create_default_filename(self):
    basename = "%s.%s" % (datetime.now().strftime(self.get_setting("screenshot/filename")), self.get_setting("screenshot/format"))
    return path.join(path.expanduser(self.get_setting("screenshot/directory")), basename)

  def do_command_line(self, command_line):
    options = command_line.get_options_dict()
    filename = None

    if options.contains("active"):
      screenshot = ActiveWindowScreenshot()
    elif options.contains("selection") or options.contains("window"):
      self.show_message_dialog(_("Not implemented"), _("Taking screenshots of selection is to be developed."), Gtk.MessageType.ERROR, Gtk.ButtonsType.OK)
      return 1
    else:
      screenshot = DesktopScreenshot()

    self.activate()
    self.take_screenshot(screenshot)
    return 0

  def on_quit(self, action, param):
    self.session.close_all()

  def on_close(self, action, params):
    self.session.close_current()

  def on_screenshot_closed(self, screenshot):
    if self.session.get_count() == 0:
      self.quit()

  def on_copy(self, action, params):
    if self.session.has_current():
      screenshot = self.session.get_current()
      self.clipboard.set_image(screenshot.get_pixbuf())