diff options
author | Eyal Lotem <[email protected]> | 2018-05-08 13:26:03 +0300 |
---|---|---|
committer | raveit65 <[email protected]> | 2018-05-23 17:28:41 +0200 |
commit | 5cfaaf3690b7d47a9176459e5444628c3817ec1a (patch) | |
tree | e84bc31b4221621a1b8da37c8d767353d1d5429b | |
parent | 71975ea7b9459d04348176b47660946629b18a99 (diff) | |
download | mate-utils-5cfaaf3690b7d47a9176459e5444628c3817ec1a.tar.bz2 mate-utils-5cfaaf3690b7d47a9176459e5444628c3817ec1a.tar.xz |
Add support for non-interactive screenshot directly to clipboard
-rw-r--r-- | mate-screenshot/src/mate-screenshot.c | 33 |
1 files changed, 26 insertions, 7 deletions
diff --git a/mate-screenshot/src/mate-screenshot.c b/mate-screenshot/src/mate-screenshot.c index 14529624..c1e29575 100644 --- a/mate-screenshot/src/mate-screenshot.c +++ b/mate-screenshot/src/mate-screenshot.c @@ -100,6 +100,7 @@ static gboolean interactive_arg = FALSE; static guint delay_arg = 0; /* Options */ +static gboolean noninteractive_clipboard_arg = FALSE; static gboolean take_window_shot = FALSE; static gboolean take_area_shot = FALSE; static gboolean include_border = FALSE; @@ -705,6 +706,14 @@ save_done_notification (gpointer data) } static void +save_screenshot_in_clipboard (GdkDisplay *display, GdkPixbuf *screenshot) +{ + GtkClipboard *clipboard = + gtk_clipboard_get_for_display (display, GDK_SELECTION_CLIPBOARD); + gtk_clipboard_set_image (clipboard, screenshot); +} + +static void screenshot_dialog_response_cb (GtkDialog *d, gint response_id, ScreenshotDialog *dialog) @@ -741,13 +750,8 @@ screenshot_dialog_response_cb (GtkDialog *d, } else if (response_id == SCREENSHOT_RESPONSE_COPY) { - GtkClipboard *clipboard; - GdkPixbuf *screenshot; - - clipboard = gtk_clipboard_get_for_display (gtk_widget_get_display (GTK_WIDGET (d)), - GDK_SELECTION_CLIPBOARD); - screenshot = screenshot_dialog_get_screenshot (dialog); - gtk_clipboard_set_image (clipboard, screenshot); + save_screenshot_in_clipboard (gtk_widget_get_display (GTK_WIDGET (d)), + screenshot_dialog_get_screenshot (dialog)); } else /* dialog was canceled */ { @@ -851,6 +855,14 @@ finish_prepare_screenshot (char *initial_uri, GdkWindow *window, GdkRectangle *r play_sound_effect (window); + if (noninteractive_clipboard_arg) { + save_screenshot_in_clipboard (gdk_window_get_display (window), screenshot); + g_free (initial_uri); + /* Done here: */ + gtk_main_quit (); + return; + } + dialog = screenshot_dialog_new (screenshot, initial_uri, take_window_shot); g_free (initial_uri); @@ -1303,6 +1315,7 @@ main (int argc, char *argv[]) const GOptionEntry entries[] = { { "window", 'w', 0, G_OPTION_ARG_NONE, &window_arg, N_("Grab a window instead of the entire screen"), NULL }, { "area", 'a', 0, G_OPTION_ARG_NONE, &area_arg, N_("Grab an area of the screen instead of the entire screen"), NULL }, + { "clipboard", 'c', 0, G_OPTION_ARG_NONE, &noninteractive_clipboard_arg, N_("Send grabbed area directly to the clipboard"), NULL }, { "include-border", 'b', 0, G_OPTION_ARG_NONE, &include_border_arg, N_("Include the window border with the screenshot"), NULL }, { "remove-border", 'B', 0, G_OPTION_ARG_NONE, &disable_border_arg, N_("Remove the window border from the screenshot"), NULL }, { "delay", 'd', 0, G_OPTION_ARG_INT, &delay_arg, N_("Take screenshot after specified delay [in seconds]"), N_("seconds") }, @@ -1339,6 +1352,12 @@ main (int argc, char *argv[]) exit (EXIT_SUCCESS); } + if (interactive_arg && noninteractive_clipboard_arg) { + g_printerr (_("Conflicting options: --clipboard and --interactive should not be " + "used at the same time.\n")); + exit (1); + } + if (window_arg && area_arg) { g_printerr (_("Conflicting options: --window and --area should not be " "used at the same time.\n")); |