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)
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())