[Goodies-commits] r5062 - in xfce4-screenshooter-plugin/trunk: . src
Jerome Guelfucci
jeromeg at xfce.org
Sat Jul 12 16:46:18 CEST 2008
Author: jeromeg
Date: 2008-07-12 14:46:18 +0000 (Sat, 12 Jul 2008)
New Revision: 5062
Modified:
xfce4-screenshooter-plugin/trunk/ChangeLog
xfce4-screenshooter-plugin/trunk/NEWS
xfce4-screenshooter-plugin/trunk/autogen.sh
xfce4-screenshooter-plugin/trunk/configure.ac.in
xfce4-screenshooter-plugin/trunk/src/main.c
xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c
xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h
xfce4-screenshooter-plugin/trunk/src/screenshooter.desktop.in.in
xfce4-screenshooter-plugin/trunk/xfce4-screenshooter.1
Log:
Reduce code duplication between plugin and executable.
Save the location of the save folder when saving without showing the save dialog.
New cli option to hide the save dialog.
New cli option to set a default save folder, saved in a rc file.
New cli option to set a custom save folder.
Updated copyrights.
Updated manpage and news.
See changelog for details.
Modified: xfce4-screenshooter-plugin/trunk/ChangeLog
===================================================================
--- xfce4-screenshooter-plugin/trunk/ChangeLog 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/ChangeLog 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,3 +1,37 @@
+2008-07-11 jeromeg
+
+ * src/main.c:
+ - add a CLI option to set the directory where screenshots are saved.
+ - add a CLI option and a rc file to save a default save folder using a dialog.
+ * src/screenshooter-utils.c: do not show full filename in save dialog.
+ * xfce4-screenshooter.1: update manpage for the new CLI options.
+
+2008-07-09 jeromeg
+
+ * src/*: remove obsolete copyrights.
+ * src/screenshooter-utils.{c,h}:
+ - move the ScreenshotData structure here.
+ - port take_screenshot to use ScreenshotData.
+ - write a generic save_screenshot function using ScreenshotData.
+ - BUGFIX: generate_filename_for_uri now outputs the whole filename with
+ its base. Fixes saving of screenshots without showing the save dialog.
+ * src/screenshooter-plugin.c:
+ - ported to use the new code.
+ - remove some obsolete code.
+ * main.c:
+ - port code to use ScreenshotData.
+ - add a CLI option to save screenshots without showing a save dialog.
+ * autogen.sh, configure.ac.in: remove some useless things, update a few others.
+ * xfce4-screenshooter.1: update manpage for the new CLI option.
+ * screenshooter.desktop.in.in: remove deprecated encoding key.
+
+2008-07-08 jeromeg
+
+ * src/screenshooter-plugin.c:
+ - separate screenshot data and plugin data.
+ - port code to use the two different structures.
+ - fix some resulting crashes.
+
2008-07-05 jeromeg
* src/*, po/POTFILES.in: bugfix, make filename translatable.
@@ -44,7 +78,7 @@
* src/screenshooter-plugin.c:
- add a default save location to the preferences dialog.
- update the code to use this new default.
- * src/main.c: save screenshots in main by default.
+ * src/main.c: save screenshots in home by default.
* po/: make update-po.
2008-06-19 16:46 jeromeg
Modified: xfce4-screenshooter-plugin/trunk/NEWS
===================================================================
--- xfce4-screenshooter-plugin/trunk/NEWS 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/NEWS 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,3 +1,12 @@
+=== Version 1.3.0 ===
+ * Code cleanup, remove deprecated code.
+ * Reduce code duplication between the executable and the plugin.
+ * New CLI option to save screenshots without showing a save dialog.
+ * New CLI option to set the save directory.
+ * New CLI option to set a default save directory, saved in a rc file.
+ * BUGFIX: generate file names correctly, screenshots should now be
+ saved in the correct place, whatever mode is being used.
+
=== Version 1.2.0 ===
* Fix gcc warnings.
* Add manpage taken from Debian package.
Modified: xfce4-screenshooter-plugin/trunk/autogen.sh
===================================================================
--- xfce4-screenshooter-plugin/trunk/autogen.sh 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/autogen.sh 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,12 +1,9 @@
#!/bin/sh
#
-# $Id: autogen.sh 23241 2006-09-29 19:05:15Z kelnos $
-#
# Copyright (c) 2002-2005
# The Xfce development team. All rights reserved.
#
# Written for Xfce by Benedikt Meurer <benny at xfce.org>.
-#
(type xdt-autogen) >/dev/null 2>&1 || {
cat >&2 <<EOF
@@ -46,5 +43,3 @@
< "configure.ac.in" >> "configure.ac"
xdt-autogen $@
-
-# vi:set ts=2 sw=2 et ai:
Modified: xfce4-screenshooter-plugin/trunk/configure.ac.in
===================================================================
--- xfce4-screenshooter-plugin/trunk/configure.ac.in 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/configure.ac.in 2008-07-12 14:46:18 UTC (rev 5062)
@@ -32,23 +32,23 @@
dnl Check for standard header files
AC_HEADER_STDC
-dnl configure the panel plugin
+dnl Check for xfce4-panel
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.22])
-dnl check for xfce4util
+dnl Check for xfce4util
XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.4])
-dnl check for x11proto
+dnl Check for x11proto
XDT_CHECK_PACKAGE([X11PROTO_CORE], [xproto], [7])
-dnl check for gtk
+dnl Check for gtk
XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.10.0])
-dnl check for glib
+dnl Check for glib
XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.12.0])
dnl Translations
-XDT_I18N([ca cs de en_GB eu fr hu nb_NO pl pt_PT sq zh_TW])
+XDT_I18N([ca cs da de el en_GB es eu fr gl hr hu id lv nb_NO nl pl pt_BR pt_PT sq zh_TW])
dnl Check for debugging support
XDT_FEATURE_DEBUG()
Modified: xfce4-screenshooter-plugin/trunk/src/main.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/main.c 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/src/main.c 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,15 +1,7 @@
/* $Id$
*
- * Copyright © 2004 German Poo-Caaman~o <gpoo at ubiobio.cl>
- * Copyright © 2005,2006 Daniel Bobadilla Leal <dbobadil at dcc.uchile.cl>
- * Copyright © 2005 Jasper Huijsmans <jasper at xfce.org>
- * Copyright © 2006 Jani Monoses <jani at ubuntu.com>
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci at gmail.com>
*
- * Portions from the Gimp sources by
- * Copyright © 1998-2000 Sven Neumann <sven at gimp.org>
- * Copyright © 2003 Henrik Brix Andersen <brix at gimp.org>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -33,6 +25,9 @@
gboolean version = FALSE;
gboolean window = FALSE;
+gboolean no_save_dialog = FALSE;
+gboolean preferences = FALSE;
+gchar * screenshot_dir;
gint delay = 0;
static GOptionEntry entries[] =
@@ -50,6 +45,18 @@
NULL
},
+ { "hide", 'h', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &no_save_dialog,
+ N_("Do not display the save dialog"),
+ NULL
+ },
+ { "save", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_FILENAME, &screenshot_dir,
+ N_("Directory where the screenshot will be saved"),
+ NULL
+ },
+ { "preferences", 'p', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &preferences,
+ N_("Dialog to set the default save folder"),
+ NULL
+ },
{ NULL }
};
@@ -57,12 +64,25 @@
{
GError *cli_error = NULL;
GdkPixbuf * screenshot;
- GdkPixbuf * thumbnail;
- gchar * filename = NULL;
- GtkWidget * preview;
- GtkWidget * chooser;
- gint dialog_response;
-
+ ScreenshotData * sd = g_new0 (ScreenshotData, 1);
+ XfceRc *rc;
+ gchar * rc_file;
+
+ rc_file = g_build_filename( xfce_get_homedir(), ".config", "xfce4", "xfce4-screenshooter", NULL);
+
+ if ( g_file_test(rc_file, G_FILE_TEST_EXISTS) )
+ {
+ rc = xfce_rc_simple_open (rc_file, TRUE);
+ screenshot_dir = g_strdup ( xfce_rc_read_entry (rc, "screenshot_dir", xfce_get_homedir () ) );
+ sd->screenshot_dir = screenshot_dir;
+ xfce_rc_close (rc);
+ }
+ else
+ {
+ screenshot_dir = g_strdup( xfce_get_homedir () );
+ sd->screenshot_dir = screenshot_dir;
+ }
+
xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
if (!gtk_init_with_args(&argc, &argv, _(""), entries, PACKAGE, &cli_error))
@@ -81,46 +101,72 @@
return 0;
}
- if (!window)
+ if (window)
{
- screenshot = take_screenshot (1,delay);
-
+ sd->whole_screen = 0;
}
else
{
- screenshot = take_screenshot (0,delay);
+ sd->whole_screen = 1;
}
- chooser = gtk_file_chooser_dialog_new ( _("Save screenshot as ..."),
+ if (no_save_dialog)
+ {
+ sd->show_save_dialog = 0;
+ }
+ else
+ {
+ sd->show_save_dialog = 1;
+ }
+
+ sd->screenshot_delay = delay;
+
+ if ( g_file_test (screenshot_dir, G_FILE_TEST_IS_DIR) )
+ {
+ sd->screenshot_dir = screenshot_dir;
+ }
+ else
+ {
+ g_warning ("%s is not a valid directory, the default directory will be used.", screenshot_dir);
+ }
+
+ if ( !preferences )
+ {
+ screenshot = take_screenshot( sd );
+ save_screenshot (screenshot, sd);
+ }
+ else
+ {
+ GtkWidget * chooser;
+ gint dialog_response;
+ gchar * dir;
+
+ dir = screenshot_dir;
+
+ chooser = gtk_file_chooser_dialog_new ( _("Default save folder"),
NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (chooser), TRUE);
- gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
- gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER ( chooser ), xfce_get_homedir () );
-
- filename = generate_filename_for_uri ( g_strdup ( xfce_get_homedir () ) );
- preview = gtk_image_new ();
-
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (chooser), filename);
- gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (chooser), preview);
-
- thumbnail = gdk_pixbuf_scale_simple (screenshot, gdk_pixbuf_get_width(screenshot)/5, gdk_pixbuf_get_height(screenshot)/5, GDK_INTERP_BILINEAR);
- gtk_image_set_from_pixbuf (GTK_IMAGE (preview), thumbnail);
- g_object_unref (thumbnail);
-
- dialog_response = gtk_dialog_run (GTK_DIALOG (chooser));
-
- if ( dialog_response == GTK_RESPONSE_ACCEPT )
- {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(chooser));
- gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
+ gtk_dialog_set_default_response (GTK_DIALOG ( chooser ), GTK_RESPONSE_ACCEPT);
+ gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER ( chooser ), dir);
+
+ dialog_response = gtk_dialog_run( GTK_DIALOG ( chooser ) );
+
+ if ( dialog_response == GTK_RESPONSE_ACCEPT )
+ {
+ dir = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( chooser ) );
+
+ rc = xfce_rc_simple_open (rc_file, FALSE);
+ xfce_rc_write_entry (rc, "screenshot_dir", dir);
+ xfce_rc_close ( rc );
+
+ g_free( dir );
+ }
+ gtk_widget_destroy( GTK_WIDGET ( chooser ) );
}
-
- gtk_widget_destroy(chooser);
- g_free(filename);
-
+
+ g_free( rc_file );
return 0;
}
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c 2008-07-12 14:46:18 UTC (rev 5062)
@@ -6,10 +6,6 @@
* Copyright © 2006 Jani Monoses <jani at ubuntu.com>
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci at gmail.com>
*
- * Portions from the Gimp sources by
- * Copyright © 1998-2000 Sven Neumann <sven at gimp.org>
- * Copyright © 2003 Henrik Brix Andersen <brix at gimp.org>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -23,7 +19,7 @@
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
+t */
#ifdef HAVE_CONFIG_H
#include <config.h>
@@ -43,7 +39,6 @@
#include "screenshooter-utils.h"
#define SCREENSHOT_ICON_NAME "applets-screenshooter"
-#define MODE 0644
typedef struct
{
@@ -51,26 +46,16 @@
GtkWidget *button;
GtkWidget *image;
- GtkWidget *preview;
- GtkTooltips *tooltips;
- GtkWidget *chooser;
-
- gint whole_screen;
- gint show_save_dialog;
-
- gint screenshot_delay;
- gchar *screenshot_dir;
-
- gint counter;
-
+
int style_id;
+ ScreenshotData *sd;
}
-ScreenshotData;
+PluginData;
/* Panel Plugin Interface */
static void screenshot_properties_dialog (XfcePanelPlugin *plugin,
- ScreenshotData *screenshot);
+ PluginData *pd);
static void screenshot_construct (XfcePanelPlugin * plugin);
XFCE_PANEL_PLUGIN_REGISTER_INTERNAL (screenshot_construct);
@@ -78,14 +63,14 @@
/* Internal functions */
static gboolean
-screenshot_set_size (XfcePanelPlugin *plugin, int size, ScreenshotData *sd)
+screenshot_set_size (XfcePanelPlugin *plugin, int size, PluginData * pd)
{
GdkPixbuf *pb;
- int width = size - 2 - 2 * MAX (sd->button->style->xthickness,
- sd->button->style->ythickness);
+ int width = size - 2 - 2 * MAX (pd->button->style->xthickness,
+ pd->button->style->ythickness);
pb = xfce_themed_icon_load (SCREENSHOT_ICON_NAME, width);
- gtk_image_set_from_pixbuf (GTK_IMAGE (sd->image), pb);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (pd->image), pb);
g_object_unref (pb);
gtk_widget_set_size_request (GTK_WIDGET (plugin), size, size);
@@ -93,94 +78,52 @@
}
static void
-screenshot_free_data (XfcePanelPlugin * plugin, ScreenshotData * sd)
+screenshot_free_data (XfcePanelPlugin * plugin, PluginData * pd)
{
- if (sd->style_id)
- g_signal_handler_disconnect (plugin, sd->style_id);
+ if (pd->style_id)
+ g_signal_handler_disconnect (plugin, pd->style_id);
- sd->style_id = 0;
- gtk_object_sink (GTK_OBJECT (sd->tooltips));
- gtk_widget_destroy (sd->chooser);
- g_free (sd);
+ pd->style_id = 0;
+ g_free (pd);
}
static void
-button_clicked(GtkWidget * button, ScreenshotData * sd)
+button_clicked(GtkWidget * button, PluginData * pd)
{
GdkPixbuf * screenshot;
- GdkPixbuf * thumbnail;
- gint width;
- gint height;
- gint dialog_response;
- gchar * filename = NULL;
-
+
/* Make the button unclickable so that the user does not press it while another
screenshot is in progress */
- gtk_widget_set_sensitive(GTK_WIDGET (sd->button), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET ( pd->button ), FALSE);
/* Get the screenshot */
- screenshot = take_screenshot(sd->whole_screen, sd->screenshot_delay);
+ screenshot = take_screenshot( pd->sd );
- /* Set the save dialog's thumbnail */
- width = gdk_pixbuf_get_width(screenshot);
- height = gdk_pixbuf_get_height(screenshot);
-
- thumbnail = gdk_pixbuf_scale_simple (screenshot,
- width/5,
- height/5, GDK_INTERP_BILINEAR);
-
- gtk_image_set_from_pixbuf (GTK_IMAGE (sd->preview), thumbnail);
- g_object_unref (thumbnail);
-
- /* Generate a default filename for the current folder */
- filename = generate_filename_for_uri (gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER (sd->chooser)));
-
- if (sd->show_save_dialog)
- {
- /* If the user wants a save dialog, we run it, and grab the filename the user
- has chosen. */
- gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (sd->chooser), filename);
- dialog_response = gtk_dialog_run (GTK_DIALOG (sd->chooser));
-
- if ( dialog_response == GTK_RESPONSE_ACCEPT )
- {
- filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(sd->chooser));
- gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
- }
-
- gtk_widget_hide ( GTK_WIDGET (sd->chooser) );
- }
- else
- {
- /* Else, we just save the file in the default folder */
- filename = generate_filename_for_uri ( sd->screenshot_dir );
- gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
- }
- gtk_widget_set_sensitive(GTK_WIDGET ( sd->button), TRUE);
- g_free (filename);
+ save_screenshot(screenshot, pd->sd);
+
+ gtk_widget_set_sensitive(GTK_WIDGET ( pd->button ), TRUE);
}
static void
screenshot_style_set (XfcePanelPlugin *plugin, gpointer ignored,
- ScreenshotData *sd)
+ PluginData *pd)
{
- screenshot_set_size (plugin, xfce_panel_plugin_get_size (plugin), sd);
+ screenshot_set_size (plugin, xfce_panel_plugin_get_size (plugin), pd);
}
static void
-screenshot_read_rc_file (XfcePanelPlugin *plugin, ScreenshotData *screenshot)
+screenshot_read_rc_file (XfcePanelPlugin *plugin, PluginData *pd)
{
char *file;
XfceRc *rc;
gint screenshot_delay = 0;
gint whole_screen = 1;
gint show_save_dialog = 1;
- gchar *screenshot_dir = g_strdup ( xfce_get_homedir ());
-
+ gchar *screenshot_dir = g_strdup ( xfce_get_homedir () );
+
if ( (file = xfce_panel_plugin_lookup_rc_file (plugin) ) != NULL)
{
rc = xfce_rc_simple_open (file, TRUE);
- g_free (file);
if ( rc != NULL )
{
@@ -188,19 +131,20 @@
whole_screen = xfce_rc_read_int_entry (rc, "whole_screen", 1);
show_save_dialog = xfce_rc_read_int_entry (rc, "show_save_dialog", 1);
screenshot_dir = g_strdup ( xfce_rc_read_entry (rc, "screenshot_dir", xfce_get_homedir () ) );
-
xfce_rc_close (rc);
}
+
+ g_free(file);
}
-
- screenshot->screenshot_delay = screenshot_delay;
- screenshot->whole_screen = whole_screen;
- screenshot->show_save_dialog = show_save_dialog;
- screenshot->screenshot_dir = screenshot_dir;
+
+ pd->sd->screenshot_delay = screenshot_delay;
+ pd->sd->whole_screen = whole_screen;
+ pd->sd->show_save_dialog = show_save_dialog;
+ pd->sd->screenshot_dir = screenshot_dir;
}
static void
-screenshot_write_rc_file (XfcePanelPlugin *plugin, ScreenshotData *screenshot)
+screenshot_write_rc_file (XfcePanelPlugin *plugin, PluginData *pd)
{
char *file;
XfceRc *rc;
@@ -214,59 +158,58 @@
if ( !rc )
return;
- xfce_rc_write_int_entry (rc, "screenshot_delay", screenshot->screenshot_delay);
- xfce_rc_write_int_entry (rc, "whole_screen", screenshot->whole_screen);
- xfce_rc_write_int_entry (rc, "show_save_dialog", screenshot->show_save_dialog);
- xfce_rc_write_entry (rc, "screenshot_dir", screenshot->screenshot_dir);
+ xfce_rc_write_int_entry (rc, "screenshot_delay", pd->sd->screenshot_delay);
+ xfce_rc_write_int_entry (rc, "whole_screen", pd->sd->whole_screen);
+ xfce_rc_write_int_entry (rc, "show_save_dialog", pd->sd->show_save_dialog);
+ xfce_rc_write_entry (rc, "screenshot_dir", pd->sd->screenshot_dir);
xfce_rc_close ( rc );
}
static void
-show_save_dialog_toggled (GtkToggleButton *tb, ScreenshotData *screenshot)
+show_save_dialog_toggled (GtkToggleButton *tb, PluginData *pd)
{
- screenshot->show_save_dialog = gtk_toggle_button_get_active ( tb );
+ pd->sd->show_save_dialog = gtk_toggle_button_get_active ( tb );
}
static void
-whole_screen_toggled (GtkToggleButton *tb, ScreenshotData *sd)
+whole_screen_toggled (GtkToggleButton *tb, PluginData *pd)
{
- sd->whole_screen = gtk_toggle_button_get_active ( tb );
+ pd->sd->whole_screen = gtk_toggle_button_get_active ( tb );
}
/* If active window is chosen, we set whole_screen to false */
static void
-active_window_toggled (GtkToggleButton *tb, ScreenshotData *sd)
+active_window_toggled (GtkToggleButton *tb, PluginData *pd)
{
- sd->whole_screen = !gtk_toggle_button_get_active ( tb );
+ pd->sd->whole_screen = !gtk_toggle_button_get_active ( tb );
}
static void
-screenshot_delay_spinner_changed(GtkWidget * spinner, ScreenshotData *sd)
+screenshot_delay_spinner_changed(GtkWidget * spinner, PluginData *pd)
{
- sd->screenshot_delay = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinner ) );
+ pd->sd->screenshot_delay = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( spinner ) );
}
static void
-cb_default_folder (GtkWidget * chooser, ScreenshotData *sd)
+cb_default_folder (GtkWidget * chooser, PluginData *pd)
{
- sd->screenshot_dir = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( chooser ) );
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( sd->chooser ), sd->screenshot_dir);
+ pd->sd->screenshot_dir = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( chooser ) );
}
static void
screenshot_dialog_response (GtkWidget *dlg, int reponse,
- ScreenshotData *screenshot)
+ PluginData *pd)
{
- g_object_set_data (G_OBJECT (screenshot->plugin), "dialog", NULL);
+ g_object_set_data (G_OBJECT (pd->plugin), "dialog", NULL);
gtk_widget_destroy (dlg);
- xfce_panel_plugin_unblock_menu (screenshot->plugin);
- screenshot_write_rc_file (screenshot->plugin, screenshot);
+ xfce_panel_plugin_unblock_menu (pd->plugin);
+ screenshot_write_rc_file (pd->plugin, pd);
}
static void
-screenshot_properties_dialog (XfcePanelPlugin *plugin, ScreenshotData *sd)
+screenshot_properties_dialog (XfcePanelPlugin *plugin, PluginData *pd)
{
GtkWidget *dlg, *vbox, *label2;
GtkWidget *options_frame, *modes_frame, *delay_box, *options_box, *modes_box;
@@ -289,7 +232,7 @@
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
g_signal_connect (dlg, "response", G_CALLBACK (screenshot_dialog_response),
- sd);
+ pd);
gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
gtk_window_set_icon_name (GTK_WINDOW (dlg), "applets-screenshooter");
@@ -315,18 +258,18 @@
gtk_widget_show (desktop_button);
gtk_box_pack_start (GTK_BOX (modes_box), desktop_button, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (desktop_button),
- sd->whole_screen);
+ pd->sd->whole_screen);
g_signal_connect (desktop_button, "toggled", G_CALLBACK (whole_screen_toggled),
- sd);
+ pd);
active_window_button = gtk_radio_button_new_with_mnemonic ( gtk_radio_button_get_group ( GTK_RADIO_BUTTON (desktop_button) ),
_("Take a screenshot of the active window"));
gtk_widget_show (active_window_button);
gtk_box_pack_start (GTK_BOX (modes_box), active_window_button, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (active_window_button),
- !sd->whole_screen);
+ !pd->sd->whole_screen);
g_signal_connect (active_window_button, "toggled", G_CALLBACK (active_window_toggled),
- sd);
+ pd);
/* Create the options frame and add the delay and save options */
options_frame = gtk_frame_new (_("Options"));
@@ -343,9 +286,9 @@
gtk_widget_show (save_button);
gtk_box_pack_start (GTK_BOX (options_box), save_button, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (save_button),
- sd->show_save_dialog);
+ pd->sd->show_save_dialog);
g_signal_connect (save_button, "toggled", G_CALLBACK (show_save_dialog_toggled),
- sd);
+ pd);
/* Default save location */
default_save_label = gtk_label_new ( "" );
@@ -357,9 +300,9 @@
dir_chooser = gtk_file_chooser_button_new (_("Default save location"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
gtk_widget_show ( dir_chooser );
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER (dir_chooser), sd->screenshot_dir);
+ gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER (dir_chooser), pd->sd->screenshot_dir);
gtk_container_add ( GTK_CONTAINER ( options_box ), dir_chooser );
- g_signal_connect (dir_chooser, "selection-changed", G_CALLBACK (cb_default_folder), sd);
+ g_signal_connect (dir_chooser, "selection-changed", G_CALLBACK (cb_default_folder), pd);
/* Screenshot delay */
delay_label = gtk_label_new ( "" );
@@ -374,7 +317,7 @@
gtk_box_pack_start (GTK_BOX (options_box), delay_box, FALSE, FALSE, 0);
screenshot_delay_spinner = gtk_spin_button_new_with_range(0.0, 60.0, 1.0);
- gtk_spin_button_set_value(GTK_SPIN_BUTTON(screenshot_delay_spinner), sd->screenshot_delay);
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON( screenshot_delay_spinner ), pd->sd->screenshot_delay);
gtk_widget_show(screenshot_delay_spinner);
gtk_box_pack_start (GTK_BOX (delay_box), screenshot_delay_spinner, FALSE, FALSE, 0);
@@ -383,7 +326,7 @@
gtk_box_pack_start (GTK_BOX (delay_box), label2, FALSE, FALSE, 0);
g_signal_connect(screenshot_delay_spinner, "value-changed",
- G_CALLBACK(screenshot_delay_spinner_changed), sd);
+ G_CALLBACK(screenshot_delay_spinner_changed), pd);
gtk_widget_show (dlg);
}
@@ -391,58 +334,43 @@
static void
screenshot_construct (XfcePanelPlugin * plugin)
{
+ PluginData *pd = g_new0 (PluginData, 1);
ScreenshotData *sd = g_new0 (ScreenshotData, 1);
+ pd->sd = sd;
+
xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
- sd->plugin = plugin;
+ pd->plugin = plugin;
- screenshot_read_rc_file (plugin, sd);
+ screenshot_read_rc_file (plugin, pd);
- sd->button = xfce_create_panel_button ();
+ pd->button = xfce_create_panel_button ();
- sd->counter = 0;
+ pd->image = gtk_image_new ();
- sd->tooltips = gtk_tooltips_new ();
- gtk_tooltips_set_tip (sd->tooltips, sd->button, _("Take screenshot"), NULL);
+ gtk_container_add (GTK_CONTAINER (pd->button), GTK_WIDGET (pd->image));
- sd->image = gtk_image_new ();
- gtk_container_add (GTK_CONTAINER (sd->button), GTK_WIDGET (sd->image));
+ gtk_widget_show_all (pd->button);
+
+ gtk_container_add (GTK_CONTAINER ( plugin ), pd->button);
+ xfce_panel_plugin_add_action_widget (plugin, pd->button);
- gtk_widget_show_all (sd->button);
+ g_signal_connect (pd->button, "clicked",
+ G_CALLBACK (button_clicked), pd);
- sd->chooser = gtk_file_chooser_dialog_new ( _("Save screenshot as ..."),
- NULL,
- GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
-
- gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (sd->chooser), TRUE);
- gtk_dialog_set_default_response (GTK_DIALOG (sd->chooser), GTK_RESPONSE_ACCEPT);
- gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER ( sd->chooser ), sd->screenshot_dir);
-
- sd->preview = gtk_image_new ();
- gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (sd->chooser), sd->preview);
-
- gtk_container_add (GTK_CONTAINER (plugin), sd->button);
- xfce_panel_plugin_add_action_widget (plugin, sd->button);
-
- g_signal_connect (sd->button, "clicked",
- G_CALLBACK (button_clicked), sd);
-
g_signal_connect (plugin, "free-data",
- G_CALLBACK (screenshot_free_data), sd);
+ G_CALLBACK (screenshot_free_data), pd);
g_signal_connect (plugin, "size-changed",
- G_CALLBACK (screenshot_set_size), sd);
+ G_CALLBACK (screenshot_set_size), pd);
- sd->style_id =
+ pd->style_id =
g_signal_connect (plugin, "style-set",
- G_CALLBACK (screenshot_style_set), sd);
+ G_CALLBACK (screenshot_style_set), pd);
xfce_panel_plugin_menu_show_configure (plugin);
g_signal_connect (plugin, "configure-plugin",
- G_CALLBACK (screenshot_properties_dialog), sd);
+ G_CALLBACK (screenshot_properties_dialog), pd);
}
XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (screenshot_construct);
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,15 +1,7 @@
/* $Id$
*
- * Copyright © 2004 German Poo-Caaman~o <gpoo at ubiobio.cl>
- * Copyright © 2005,2006 Daniel Bobadilla Leal <dbobadil at dcc.uchile.cl>
- * Copyright © 2005 Jasper Huijsmans <jasper at xfce.org>
- * Copyright © 2006 Jani Monoses <jani at ubuntu.com>
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci at gmail.com>
*
- * Portions from the Gimp sources by
- * Copyright © 1998-2000 Sven Neumann <sven at gimp.org>
- * Copyright © 2003 Henrik Brix Andersen <brix at gimp.org>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -32,6 +24,7 @@
static Window get_window_property (Window xwindow, Atom atom);
static Window find_toplevel_window (Window xid);
static Window screenshot_find_active_window (void);
+static gchar *generate_filename_for_uri(char *uri);
/* Internals */
@@ -117,16 +110,44 @@
while (TRUE);
}
+static gchar *generate_filename_for_uri(char *uri)
+{
+ gchar *file_name;
+ unsigned int i = 0;
+
+ if ( uri == NULL )
+ {
+ return NULL;
+ }
+
+ file_name = g_strdup ( _("Screenshot.png") );
+
+ if( g_access ( g_build_filename (uri, file_name, NULL), F_OK ) != 0 )
+ {
+ return file_name;
+ }
+
+ do
+ {
+ i++;
+ g_free (file_name);
+ file_name = g_strdup_printf ( _("Screenshot-%d.png"), i);
+ }
+ while( g_access ( g_build_filename (uri, file_name, NULL), F_OK ) == 0 );
+
+ return file_name;
+}
+
/* Public */
-GdkPixbuf *take_screenshot (gint fullscreen, gint delay)
+GdkPixbuf *take_screenshot (ScreenshotData * sd)
{
GdkPixbuf * screenshot;
GdkWindow * window;
gint width;
gint height;
- if (fullscreen)
+ if (sd->whole_screen)
{
window = gdk_get_default_root_window();
}
@@ -135,7 +156,7 @@
window = gdk_window_foreign_new (find_toplevel_window (screenshot_find_active_window ()));
}
- sleep(delay);
+ sleep(sd->screenshot_delay);
gdk_drawable_get_size(window, &width, &height);
@@ -147,30 +168,57 @@
return screenshot;
}
-gchar *generate_filename_for_uri(char *uri)
+void save_screenshot (GdkPixbuf * screenshot, ScreenshotData * sd)
{
- gchar *file_name;
- unsigned int i = 0;
+ GdkPixbuf * thumbnail;
+ gchar * filename = NULL;
+ GtkWidget * preview;
+ GtkWidget * chooser;
+ gint dialog_response;
+
+ filename = generate_filename_for_uri ( sd->screenshot_dir );
- if ( uri == NULL )
- {
- return NULL;
- }
+ if ( sd->show_save_dialog )
+ {
+ /* If the user wants a save dialog, we run it, and grab the filename the user
+ has chosen. */
+
+ chooser = gtk_file_chooser_dialog_new ( _("Save screenshot as ..."),
+ NULL,
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER ( chooser ), TRUE);
+ gtk_dialog_set_default_response (GTK_DIALOG ( chooser ), GTK_RESPONSE_ACCEPT);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER ( chooser ), sd->screenshot_dir);
+
+ preview = gtk_image_new ();
- file_name = g_strdup ( _("Screenshot.png") );
+ gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER ( chooser ), filename);
+ gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER ( chooser ), preview);
+
+ thumbnail = gdk_pixbuf_scale_simple (screenshot, gdk_pixbuf_get_width(screenshot)/5,
+ gdk_pixbuf_get_height(screenshot)/5,
+ GDK_INTERP_BILINEAR);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (preview), thumbnail);
+ g_object_unref ( thumbnail );
- if( g_access ( g_build_filename (uri, file_name, NULL), F_OK ) != 0 )
- {
- return file_name;
- }
-
- do
- {
- i++;
- g_free (file_name);
- file_name = g_strdup_printf ( _("Screenshot-%d.png"), i);
- }
- while( g_access ( g_build_filename (uri, file_name, NULL), F_OK ) == 0 );
-
- return file_name;
+ dialog_response = gtk_dialog_run ( GTK_DIALOG ( chooser ) );
+
+ if ( dialog_response == GTK_RESPONSE_ACCEPT )
+ {
+ filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER ( chooser ) );
+ gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
+ }
+
+ gtk_widget_destroy ( GTK_WIDGET ( chooser ) );
+ }
+ else
+ {
+ /* Else, we just save the file in the default folder */
+ filename = g_build_filename (sd->screenshot_dir, filename, NULL);
+ gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
+ }
+ g_free( filename );
}
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,15 +1,7 @@
/* $Id$
*
- * Copyright © 2004 German Poo-Caaman~o <gpoo at ubiobio.cl>
- * Copyright © 2005,2006 Daniel Bobadilla Leal <dbobadil at dcc.uchile.cl>
- * Copyright © 2005 Jasper Huijsmans <jasper at xfce.org>
- * Copyright © 2006 Jani Monoses <jani at ubuntu.com>
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci at gmail.com>
*
- * Portions from the Gimp sources by
- * Copyright © 1998-2000 Sven Neumann <sven at gimp.org>
- * Copyright © 2003 Henrik Brix Andersen <brix at gimp.org>
- *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
@@ -39,5 +31,15 @@
#include <X11/Xatom.h>
#include <unistd.h>
-GdkPixbuf *take_screenshot (gint fullscreen, gint delay);
-gchar *generate_filename_for_uri(char *uri);
+typedef struct
+{
+ gint whole_screen;
+ gint show_save_dialog;
+
+ gint screenshot_delay;
+ gchar *screenshot_dir;
+}
+ScreenshotData;
+
+GdkPixbuf *take_screenshot (ScreenshotData * sd);
+void save_screenshot (GdkPixbuf * screenshot, ScreenshotData * sd);
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter.desktop.in.in
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter.desktop.in.in 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter.desktop.in.in 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,6 +1,5 @@
[Xfce Panel]
Type=X-XFCE-PanelPlugin
-Encoding=UTF-8
_Name= Screenshot
_Comment= Take a screenshot
Icon=applets-screenshooter
Modified: xfce4-screenshooter-plugin/trunk/xfce4-screenshooter.1
===================================================================
--- xfce4-screenshooter-plugin/trunk/xfce4-screenshooter.1 2008-07-12 14:38:59 UTC (rev 5061)
+++ xfce4-screenshooter-plugin/trunk/xfce4-screenshooter.1 2008-07-12 14:46:18 UTC (rev 5062)
@@ -1,7 +1,7 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
-.TH XFCE4-SCREENSHOOTER-PLUGIN "1" "June 2008" "xfce4-screenshooter-plugin 1.1.0" "User Commands"
+.TH XFCE4-SCREENSHOOTER-PLUGIN "1" "June 2008" "xfce4-screenshooter-plugin 1.2.5" "User Commands"
.SH NAME
-xfce4-screenshooter-plugin \- panel plugin and standalone app to take screenshots
+xfce4-screenshooter-plugin \- panel plugin and standalone application to take screenshots
.SH DESCRIPTION
.SS "Usage:"
.IP
@@ -27,5 +27,14 @@
\fB\-d\fR, \fB\-\-delay\fR
Delay in seconds before taking the screenshot
.TP
+\fB\-h\fR, \fB\-\-hide\fR
+Do not display the save dialog
+.TP
+\fB\-s\fR, \fB\-\-save\fR
+Directory where the screenshot will be saved
+.TP
+\fB\-p\fR, \fB\-\-preferences\fR
+Dialog to set the default save folder
+.TP
\fB\-\-display\fR=\fIDISPLAY\fR
X display to use
More information about the Goodies-commits
mailing list