[Goodies-commits] r4903 - in xfce4-screenshooter-plugin/trunk: . po src
Jerome Guelfucci
jeromeg at xfce.org
Sun Jun 8 00:23:16 CEST 2008
Author: jeromeg
Date: 2008-06-07 22:23:16 +0000 (Sat, 07 Jun 2008)
New Revision: 4903
Added:
xfce4-screenshooter-plugin/trunk/src/main.c
xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
Removed:
xfce4-screenshooter-plugin/trunk/src/screenshooter.c
Modified:
xfce4-screenshooter-plugin/trunk/ChangeLog
xfce4-screenshooter-plugin/trunk/NEWS
xfce4-screenshooter-plugin/trunk/README
xfce4-screenshooter-plugin/trunk/configure.ac
xfce4-screenshooter-plugin/trunk/po/POTFILES.in
xfce4-screenshooter-plugin/trunk/src/Makefile.am
xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c
xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h
Log:
Add executable with cli options and various code improvements.
Modified: xfce4-screenshooter-plugin/trunk/ChangeLog
===================================================================
--- xfce4-screenshooter-plugin/trunk/ChangeLog 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/ChangeLog 2008-06-07 22:23:16 UTC (rev 4903)
@@ -1,3 +1,12 @@
+2008-06-08 00:15 jeromeg
+
+ * src/main.c: Add an executable to take screenshots.
+ * Modify autotools, makefiles and locale files to
+ build it, thanks to Gauvain Pocentek.
+ * src/screenshooter-utils.h: Add some headers to fix build warnings.
+ * README: update with executable cli options
+ * NEWS: update
+
2008-06-06 19:19 jeromeg
* Move the code to a src/ folder and remove the panel-plugin one.
Modified: xfce4-screenshooter-plugin/trunk/NEWS
===================================================================
--- xfce4-screenshooter-plugin/trunk/NEWS 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/NEWS 2008-06-07 22:23:16 UTC (rev 4903)
@@ -0,0 +1,5 @@
+=== Version 1.1.0 ===
+ * Delay now works.
+ * Canceling save now works.
+ * Executable to take screenshots from cli or with a keybinding.
+ * Many code improvements.
Modified: xfce4-screenshooter-plugin/trunk/README
===================================================================
--- xfce4-screenshooter-plugin/trunk/README 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/README 2008-06-07 22:23:16 UTC (rev 4903)
@@ -3,3 +3,8 @@
This is a plugin for the Xfce panel to take screenshots, similar to gnome-screenshot. The code is designed to be clean and simple, but improvements, fixes, bug reporting are welcome.
Since version 1.0.0 the plugin is compatible with xfce4-panel >= 4.3-svn, with several improvements. Thanks to Jani Monoses who ported the plugin to the new structure and added new features.
+
+Application Options:
+ -v, --version Version information
+ -w, --window Take a screenshot of the active window
+ -d, --delay Delay in seconds before taking the screenshot
Modified: xfce4-screenshooter-plugin/trunk/configure.ac
===================================================================
--- xfce4-screenshooter-plugin/trunk/configure.ac 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/configure.ac 2008-06-07 22:23:16 UTC (rev 4903)
@@ -32,9 +32,18 @@
dnl configure the panel plugin
XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.22])
+dnl check for xfce4util
+XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.4])
+
dnl check for x11proto
XDT_CHECK_PACKAGE([X11PROTO_CORE], [xproto], [7])
+dnl check for gtk
+XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.10.0])
+
+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])
Modified: xfce4-screenshooter-plugin/trunk/po/POTFILES.in
===================================================================
--- xfce4-screenshooter-plugin/trunk/po/POTFILES.in 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/po/POTFILES.in 2008-06-07 22:23:16 UTC (rev 4903)
@@ -1,3 +1,4 @@
-panel-plugin/screenshooter.c
-panel-plugin/screenshooter.desktop.in.in
+src/screenshooter.c
+src/main.c
+src/screenshooter.desktop.in.in
Modified: xfce4-screenshooter-plugin/trunk/src/Makefile.am
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/Makefile.am 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/src/Makefile.am 2008-06-07 22:23:16 UTC (rev 4903)
@@ -1,5 +1,6 @@
plugindir = $(libexecdir)/xfce4/panel-plugins
plugin_PROGRAMS = xfce4-screenshooter-plugin
+bin_PROGRAMS = xfce4-screenshooter
xfce4_screenshooter_plugin_CFLAGS = \
-DPACKAGE_LOCALE_DIR=\"$(localedir)\" \
@@ -9,8 +10,22 @@
@LIBXFCE4PANEL_LIBS@
xfce4_screenshooter_plugin_SOURCES = \
- screenshooter.c \
- screenshooter-utils.c
+ screenshooter-plugin.c \
+ screenshooter-utils.c screenshooter-utils.h
+
+xfce4_screenshooter_CFLAGS = \
+ @GTK_CFLAGS@ \
+ @GLIB_CFLAGS@ \
+ @LIBXFCE4UTIL_CFLAGS@ \
+ -DPACKAGE_LOCALE_DIR=\"$(localedir)\"
+
+xfce4_screenshooter_LDFLAGS = \
+ @GTK_LIBS@ \
+ @LIBXFCE4UTIL_LIBS@
+
+xfce4_screenshooter_SOURCES = \
+ main.c \
+ screenshooter-utils.c screenshooter-utils.h
# .desktop file
#
Added: xfce4-screenshooter-plugin/trunk/src/main.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/main.c (rev 0)
+++ xfce4-screenshooter-plugin/trunk/src/main.c 2008-06-07 22:23:16 UTC (rev 4903)
@@ -0,0 +1,126 @@
+/* $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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <libxfce4util/libxfce4util.h>
+
+#include "screenshooter-utils.h"
+
+gboolean version = FALSE;
+gboolean window = FALSE;
+gint delay = 0;
+
+static GOptionEntry entries[] =
+{
+ { "version", 'v', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &version,
+ N_("Version information"),
+ NULL
+ },
+ { "window", 'w', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_NONE, &window,
+ N_("Take a screenshot of the active window"),
+ NULL
+ },
+ { "delay", 'd', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &delay,
+ N_("Delay in seconds before taking the screenshot"),
+ NULL
+
+ },
+ { NULL }
+};
+
+int main(int argc, char **argv)
+{
+ GError *cli_error = NULL;
+ GdkPixbuf * screenshot;
+ GdkPixbuf * thumbnail;
+ gchar * filename = NULL;
+ GtkWidget * preview;
+ GtkWidget * chooser;
+ gint dialog_response;
+
+ xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+ if (!gtk_init_with_args(&argc, &argv, _(""), entries, PACKAGE, &cli_error))
+ {
+ if (cli_error != NULL)
+ {
+ g_print (_("%s: %s\nTry %s --help to see a full list of available command line options.\n"), PACKAGE, cli_error->message, PACKAGE_NAME);
+ g_error_free (cli_error);
+ return 1;
+ }
+ }
+
+ if (version)
+ {
+ g_print("%s\n", PACKAGE_STRING);
+ return 0;
+ }
+
+ if (!window)
+ {
+ screenshot = take_screenshot (1,delay);
+
+ }
+ else
+ {
+ screenshot = take_screenshot (0,delay);
+ }
+
+ 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);
+
+ filename = generate_filename_for_uri(gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(chooser)));
+ 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_widget_destroy(chooser);
+ g_free(filename);
+}
+
Added: xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c (rev 0)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c 2008-06-07 22:23:16 UTC (rev 4903)
@@ -0,0 +1,379 @@
+/* $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
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Library General Public License for more details.
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+
+#include <libxfcegui4/libxfcegui4.h>
+#include <libxfce4panel/xfce-panel-plugin.h>
+#include <libxfce4panel/xfce-panel-convenience.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <X11/Xatom.h>
+
+#include "screenshooter-utils.h"
+
+#define SCREENSHOT_ICON_NAME "applets-screenshooter"
+#define MODE 0644
+
+typedef struct
+{
+ XfcePanelPlugin *plugin;
+
+ GtkWidget *button;
+ GtkWidget *image;
+ GtkWidget *preview;
+ GtkTooltips *tooltips;
+ GtkWidget *chooser;
+
+ gint whole_screen;
+ gint ask_for_file;
+
+ gint screenshot_delay;
+ gchar *screenshots_dir;
+
+ gint counter;
+
+ NetkScreen *screen;
+ int netk_id;
+ int screen_id;
+ int style_id;
+}
+ScreenshotData;
+
+/* Panel Plugin Interface */
+
+static void screenshot_properties_dialog (XfcePanelPlugin *plugin,
+ ScreenshotData *screenshot);
+static void screenshot_construct (XfcePanelPlugin * plugin);
+
+XFCE_PANEL_PLUGIN_REGISTER_INTERNAL (screenshot_construct);
+
+/* internal functions */
+
+static gboolean
+screenshot_set_size (XfcePanelPlugin *plugin, int size, ScreenshotData *sd)
+{
+ GdkPixbuf *pb;
+ int width = size - 2 - 2 * MAX (sd->button->style->xthickness,
+ sd->button->style->ythickness);
+
+ pb = xfce_themed_icon_load (SCREENSHOT_ICON_NAME, width);
+ gtk_image_set_from_pixbuf (GTK_IMAGE (sd->image), pb);
+ g_object_unref (pb);
+ gtk_widget_set_size_request (GTK_WIDGET (plugin), size, size);
+
+ return TRUE;
+}
+
+static void
+screenshot_free_data (XfcePanelPlugin * plugin, ScreenshotData * sd)
+{
+ if (sd->netk_id)
+ g_signal_handler_disconnect (sd->screen, sd->netk_id);
+
+ if (sd->screen_id)
+ g_signal_handler_disconnect (plugin, sd->screen_id);
+
+ if (sd->style_id)
+ g_signal_handler_disconnect (plugin, sd->style_id);
+
+ sd->netk_id = sd->screen_id = sd->style_id = 0;
+ gtk_object_sink (GTK_OBJECT (sd->tooltips));
+ gtk_widget_destroy (sd->chooser);
+ g_free (sd);
+}
+
+static void
+button_clicked(GtkWidget * button, ScreenshotData * sd)
+{
+ GdkPixbuf * screenshot;
+ GdkPixbuf * thumbnail;
+ gint width;
+ gint height;
+ gint dialog_response;
+ gchar * filename = NULL;
+
+ gtk_widget_set_sensitive(GTK_WIDGET (sd->button), FALSE);
+
+ screenshot = take_screenshot(sd->whole_screen, sd->screenshot_delay);
+
+ 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);
+
+ filename = generate_filename_for_uri (gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER (sd->chooser)));
+
+ if (sd->ask_for_file)
+ {
+ 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
+ {
+ gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL);
+ }
+ gtk_widget_set_sensitive(GTK_WIDGET ( sd->button), TRUE);
+ g_free (filename);
+}
+
+static void
+screenshot_style_set (XfcePanelPlugin *plugin, gpointer ignored,
+ ScreenshotData *sd)
+{
+ screenshot_set_size (plugin, xfce_panel_plugin_get_size (plugin), sd);
+}
+
+static void
+screenshot_read_rc_file (XfcePanelPlugin *plugin, ScreenshotData *screenshot)
+{
+ char *file;
+ XfceRc *rc;
+ gint screenshot_delay = 2;
+ gint whole_screen = 1;
+ gint ask_for_file = 1;
+
+ if ((file = xfce_panel_plugin_lookup_rc_file (plugin)) != NULL)
+ {
+ rc = xfce_rc_simple_open (file, TRUE);
+ g_free (file);
+
+ if (rc != NULL)
+ {
+ screenshot_delay = xfce_rc_read_int_entry (rc, "screenshot_delay", 2);
+ whole_screen = xfce_rc_read_int_entry (rc, "whole_screen", 1);
+ ask_for_file = xfce_rc_read_int_entry (rc, "ask_for_file", 1);
+
+ xfce_rc_close (rc);
+ }
+ }
+
+ screenshot->screenshot_delay = screenshot_delay;
+ screenshot->whole_screen = whole_screen;
+ screenshot->ask_for_file = ask_for_file;
+}
+
+static void
+screenshot_write_rc_file (XfcePanelPlugin *plugin, ScreenshotData *screenshot)
+{
+ char *file;
+ XfceRc *rc;
+
+ if (!(file = xfce_panel_plugin_save_location (plugin, TRUE)))
+ return;
+
+ rc = xfce_rc_simple_open (file, FALSE);
+ g_free (file);
+
+ 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, "ask_for_file", screenshot->ask_for_file);
+
+ xfce_rc_close (rc);
+}
+
+static void
+ask_for_file_toggled (GtkToggleButton *tb, ScreenshotData *screenshot)
+{
+ screenshot->ask_for_file = gtk_toggle_button_get_active (tb);
+}
+
+static void
+whole_screen_toggled (GtkToggleButton *tb, ScreenshotData *sd)
+{
+ sd->whole_screen = gtk_toggle_button_get_active (tb);
+}
+
+static void
+screenshot_delay_spinner_changed(GtkWidget * spinner, ScreenshotData *sd)
+{
+ sd->screenshot_delay = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinner));
+}
+
+static void
+screenshot_dialog_response (GtkWidget *dlg, int reponse,
+ ScreenshotData *screenshot)
+{
+ g_object_set_data (G_OBJECT (screenshot->plugin), "dialog", NULL);
+
+ gtk_widget_destroy (dlg);
+ xfce_panel_plugin_unblock_menu (screenshot->plugin);
+ screenshot_write_rc_file (screenshot->plugin, screenshot);
+}
+
+static void
+screenshot_properties_dialog (XfcePanelPlugin *plugin, ScreenshotData *sd)
+{
+ GtkWidget *dlg, *header, *vbox, *hbox2, *label2, *cb1, *cb2;
+ GtkWidget *screenshot_delay_spinner;
+
+ xfce_panel_plugin_block_menu (plugin);
+
+ dlg = gtk_dialog_new_with_buttons (_("Properties"),
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (plugin))),
+ GTK_DIALOG_DESTROY_WITH_PARENT |
+ GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_OK,
+ NULL);
+
+ g_object_set_data (G_OBJECT (plugin), "dialog", dlg);
+
+ gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
+
+ g_signal_connect (dlg, "response", G_CALLBACK (screenshot_dialog_response),
+ sd);
+
+ gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
+
+ header = xfce_create_header (NULL, _("Screenshots"));
+ gtk_widget_set_size_request (GTK_BIN (header)->child, 200, 32);
+ gtk_container_set_border_width (GTK_CONTAINER (header), 6);
+ gtk_widget_show (header);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), header,
+ FALSE, TRUE, 0);
+
+ vbox = gtk_vbox_new (FALSE, 8);
+ gtk_container_set_border_width (GTK_CONTAINER (vbox), 6);
+ gtk_widget_show (vbox);
+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox,
+ TRUE, TRUE, 0);
+
+ cb1 = gtk_check_button_new_with_mnemonic (_("Ask for _filename"));
+ gtk_widget_show (cb1);
+ gtk_box_pack_start (GTK_BOX (vbox), cb1, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb1),
+ sd->ask_for_file);
+ g_signal_connect (cb1, "toggled", G_CALLBACK (ask_for_file_toggled),
+ sd);
+
+ cb2 = gtk_check_button_new_with_mnemonic (_("Take a screenshot of the whole screen"));
+ gtk_widget_show (cb2);
+ gtk_box_pack_start (GTK_BOX (vbox), cb2, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb2),
+ sd->whole_screen);
+ g_signal_connect (cb2, "toggled", G_CALLBACK (whole_screen_toggled),
+ sd);
+
+ /* Screenshot delay */
+ hbox2 = gtk_hbox_new(FALSE, 8);
+ gtk_widget_show(hbox2);
+ gtk_box_pack_start (GTK_BOX (vbox), hbox2, 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_widget_show(screenshot_delay_spinner);
+ gtk_box_pack_start (GTK_BOX (hbox2), screenshot_delay_spinner, FALSE, FALSE, 0);
+
+ label2 = gtk_label_new_with_mnemonic(_("Delay before taking screenshot"));
+ gtk_widget_show(label2);
+ gtk_box_pack_start (GTK_BOX (hbox2), label2, FALSE, FALSE, 0);
+
+ g_signal_connect(screenshot_delay_spinner, "value-changed",
+ G_CALLBACK(screenshot_delay_spinner_changed), sd);
+
+ gtk_widget_show (dlg);
+}
+
+static void
+screenshot_construct (XfcePanelPlugin * plugin)
+{
+ ScreenshotData *sd = g_new0 (ScreenshotData, 1);
+
+ xfce_textdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
+ sd->plugin = plugin;
+
+ screenshot_read_rc_file (plugin, sd);
+
+ sd->button = xfce_create_panel_button ();
+
+ sd->counter = 0;
+
+ sd->tooltips = gtk_tooltips_new ();
+ gtk_tooltips_set_tip (sd->tooltips, sd->button, _("Take screenshot"), NULL);
+
+ sd->image = gtk_image_new ();
+ gtk_container_add (GTK_CONTAINER (sd->button), GTK_WIDGET (sd->image));
+
+ gtk_widget_show_all (sd->button);
+
+ 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);
+
+ 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_signal_connect (plugin, "size-changed",
+ G_CALLBACK (screenshot_set_size), sd);
+
+ sd->style_id =
+ g_signal_connect (plugin, "style-set",
+ G_CALLBACK (screenshot_style_set), sd);
+
+ xfce_panel_plugin_menu_show_configure (plugin);
+ g_signal_connect (plugin, "configure-plugin",
+ G_CALLBACK (screenshot_properties_dialog), sd);
+}
+XFCE_PANEL_PLUGIN_REGISTER_EXTERNAL (screenshot_construct);
Property changes on: xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
___________________________________________________________________
Name: svn:executable
+ *
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-06-07 22:23:16 UTC (rev 4903)
@@ -27,6 +27,7 @@
#include <screenshooter-utils.h>
+#define MODE 0644
/* Prototypes */
@@ -147,3 +148,25 @@
return screenshot;
}
+
+gchar *generate_filename_for_uri(char *uri)
+{
+ int test;
+ gchar *file_name;
+ unsigned int i = 0;
+ if(uri == NULL)
+ return NULL;
+ file_name = g_strdup ("Screenshot.png");
+ if((test=open(g_build_filename(uri, file_name, NULL),O_RDWR,MODE))==-1)
+ {
+ return file_name;
+ }
+ do
+ {
+ i++;
+ g_free (file_name);
+ file_name = g_strdup_printf ("Screenshot-%d.png",i);
+ }
+ while((test=open(g_build_filename(uri, file_name, NULL),O_RDWR,MODE))!=-1);
+ return file_name;
+}
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h 2008-06-07 17:59:06 UTC (rev 4902)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h 2008-06-07 22:23:16 UTC (rev 4903)
@@ -32,6 +32,8 @@
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
+#include <fcntl.h>
#include <X11/Xatom.h>
GdkPixbuf *take_screenshot (gint fullscreen, gint delay);
+gchar *generate_filename_for_uri(char *uri);
Deleted: xfce4-screenshooter-plugin/trunk/src/screenshooter.c
More information about the Goodies-commits
mailing list