Skip to content
Snippets Groups Projects
Commit fb30b293 authored by Jerome Guelfucci's avatar Jerome Guelfucci
Browse files

Add dialog when no CLI option is passed to the executable.

(Old svn revision: 5581)
parent da4a58ef
No related branches found
No related tags found
No related merge requests found
2008-10-12 jeromeg
* src/screenshooter-dialogs.{c,h}:
- new file to handle the different dialogs.
* src/main.c:
- include screenshooter-dialogs.h
- (main) move the dialog for the preferred directory to
screenshooter-dialogs.c
- (main) if no CLI option is given, show a dialog to set options and take a
screenshot.
* src/screenshooter-plugin.c: fix indentation of a function.
* configure.ac.in:
- hardcode the dependence on libxfcegui4.
- add japanese to the list of translations.
* src/Makefile.am: add libxfcegui4 flags.
* NEWS: updated.
2008-10-05 jeromeg 2008-10-05 jeromeg
* NEWS: updated. * NEWS: updated.
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
desktop when xfdesktop is set up not to display any icons. desktop when xfdesktop is set up not to display any icons.
* New and updated translations, thanks to the fabulous translation team. * New and updated translations, thanks to the fabulous translation team.
* New CLI option to take a screenshot of the desktop. * New CLI option to take a screenshot of the desktop.
* Add a dialog to set the screenshot options and take a screenshot when no
CLI option is given to the executable.
=== Version 1.3.2 === === Version 1.3.2 ===
......
...@@ -38,6 +38,9 @@ XDT_CHECK_PACKAGE([LIBXFCE4PANEL], [libxfce4panel-1.0], [4.3.22]) ...@@ -38,6 +38,9 @@ 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]) XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.4])
dnl Check for xfcegui4
XDT_CHECK_PACKAGE([LIBXFCEGUI4], [libxfcegui4-1.0], [4.4])
dnl Check for x11proto dnl Check for x11proto
XDT_CHECK_PACKAGE([X11PROTO_CORE], [xproto], [7]) XDT_CHECK_PACKAGE([X11PROTO_CORE], [xproto], [7])
...@@ -48,7 +51,7 @@ dnl Check for glib ...@@ -48,7 +51,7 @@ dnl Check for glib
XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.12.0]) XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.12.0])
dnl Translations dnl Translations
XDT_I18N([ar ca cs da de el en_GB es eu fr gl hr hu id lv nb_NO nl pl pt_BR pt_PT sq uk ur zh_TW]) XDT_I18N([ar ca cs da de el en_GB es eu fr gl hr hu id ja lv nb_NO nl pl pt_BR pt_PT sq uk ur zh_TW])
dnl Check for debugging support dnl Check for debugging support
XDT_FEATURE_DEBUG() XDT_FEATURE_DEBUG()
......
...@@ -2,3 +2,4 @@ src/screenshooter-plugin.c ...@@ -2,3 +2,4 @@ src/screenshooter-plugin.c
src/main.c src/main.c
src/screenshooter-utils.c src/screenshooter-utils.c
src/screenshooter.desktop.in.in src/screenshooter.desktop.in.in
src/screenshooter-dialogs.c
...@@ -17,15 +17,18 @@ xfce4_screenshooter_CFLAGS = \ ...@@ -17,15 +17,18 @@ xfce4_screenshooter_CFLAGS = \
@GTK_CFLAGS@ \ @GTK_CFLAGS@ \
@GLIB_CFLAGS@ \ @GLIB_CFLAGS@ \
@LIBXFCE4UTIL_CFLAGS@ \ @LIBXFCE4UTIL_CFLAGS@ \
@LIBXFCEGUI4_CFLAGS@ \
-DPACKAGE_LOCALE_DIR=\"$(localedir)\" -Werror -DPACKAGE_LOCALE_DIR=\"$(localedir)\" -Werror
xfce4_screenshooter_LDFLAGS = \ xfce4_screenshooter_LDFLAGS = \
@GTK_LIBS@ \ @GTK_LIBS@ \
@LIBXFCE4UTIL_LIBS@ @LIBXFCE4UTIL_LIBS@ \
@LIBXFCEGUI4_LIBS@
xfce4_screenshooter_SOURCES = \ xfce4_screenshooter_SOURCES = \
main.c \ main.c \
screenshooter-utils.c screenshooter-utils.h screenshooter-utils.c screenshooter-utils.h \
screenshooter-dialogs.c screenshooter-dialogs.h
# .desktop file # .desktop file
# #
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
#include <config.h> #include <config.h>
#endif #endif
#include "screenshooter-utils.h" #include "screenshooter-dialogs.h"
...@@ -76,46 +76,6 @@ static GOptionEntry entries[] = ...@@ -76,46 +76,6 @@ static GOptionEntry entries[] =
void screenshooter_preferences_dialog (gchar *rc_file,
gchar *current_default_dir)
{
GtkWidget * chooser;
gint dialog_response;
gchar * dir;
XfceRc *rc;
/* The preferences dialog is a plain gtk_file_chooser, we just get the
folder the user selected and write it in the conf file*/
chooser =
gtk_file_chooser_dialog_new (_("Default save folder"),
NULL,
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
gtk_window_set_icon_name (GTK_WINDOW (chooser), "applets-screenshooter");
gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
current_default_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));
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
GError *cli_error = NULL; GError *cli_error = NULL;
...@@ -176,7 +136,7 @@ int main(int argc, char **argv) ...@@ -176,7 +136,7 @@ int main(int argc, char **argv)
} }
else else
{ {
sd->mode = 0; sd->mode = FULLSCREEN;
} }
/* Wether to show the save dialog allowing to choose a filename and a save /* Wether to show the save dialog allowing to choose a filename and a save
...@@ -220,19 +180,37 @@ int main(int argc, char **argv) ...@@ -220,19 +180,37 @@ int main(int argc, char **argv)
} }
/* If a mode cli option is given, take the screenshot accordingly. */ /* If a mode cli option is given, take the screenshot accordingly. */
if (sd->mode) if (fullscreen || window)
{ {
screenshot = take_screenshot (sd->mode, sd->delay); screenshot = take_screenshot (sd->mode, sd->delay);
save_screenshot (screenshot, sd->show_save_dialog, sd->screenshot_dir); save_screenshot (screenshot, sd->show_save_dialog, sd->screenshot_dir);
g_object_unref (screenshot); g_object_unref (screenshot);
} }
/* If -p is given, show the preferences dialog */ /* If -p is given, show the preferences dialog */
if (preferences) else if (preferences)
{ {
screenshooter_preferences_dialog (rc_file, sd->screenshot_dir); screenshooter_preferences_dialog (rc_file, sd->screenshot_dir);
} }
else
{
GtkWidget *dialog;
dialog = screenshooter_dialog_new (sd);
gint response;
response = gtk_dialog_run (GTK_DIALOG (dialog));
if (response == GTK_RESPONSE_OK)
{
screenshot = take_screenshot (sd->mode, sd->delay);
save_screenshot (screenshot, sd->show_save_dialog,
sd->screenshot_dir);
g_object_unref (screenshot);
}
gtk_widget_destroy (dialog);
}
g_free (sd->screenshot_dir); g_free (sd->screenshot_dir);
g_free (sd); g_free (sd);
......
/* $Id$
*
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci@gmail.com>
*
* 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.
*/
#include "screenshooter-dialogs.h"
/* Internals */
static void cb_fullscreen_screen_toggled (GtkToggleButton *tb,
ScreenshotData *sd)
{
if (gtk_toggle_button_get_active (tb))
{
sd->mode = FULLSCREEN;
}
else
{
sd->mode = ACTIVE_WINDOW;
}
}
static void cb_active_window_toggled (GtkToggleButton *tb,
ScreenshotData *sd)
{
if (gtk_toggle_button_get_active (tb))
{
sd->mode = ACTIVE_WINDOW;
}
else
{
sd->mode = FULLSCREEN;
}
}
static void cb_show_save_dialog_toggled (GtkToggleButton *tb,
ScreenshotData *sd)
{
sd->show_save_dialog = gtk_toggle_button_get_active (tb);
}
static void cb_default_folder (GtkWidget *chooser,
ScreenshotData *sd)
{
sd->screenshot_dir =
gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));
}
static void cb_delay_spinner_changed (GtkWidget *spinner,
ScreenshotData *sd)
{
sd->delay =
gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner));
}
/* Public */
GtkWidget *screenshooter_dialog_new (ScreenshotData *sd)
{
GtkWidget *dlg;
GtkWidget *vbox;
GtkWidget *modes_frame, *modes_box;
GtkWidget *active_window_button = NULL, *fullscreen_button;
GtkWidget *options_frame, *options_box;
GtkWidget *save_button;
GtkWidget *default_save_label, *dir_chooser;
GtkWidget *delay_label, *delay_box, *delay_spinner, *label2;
/* Create the dialog */
dlg =
xfce_titled_dialog_new_with_buttons (_("Screenshot"),
NULL,
GTK_DIALOG_DESTROY_WITH_PARENT |
GTK_DIALOG_NO_SEPARATOR,
GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL,
GTK_STOCK_OK, GTK_RESPONSE_OK,
NULL);
gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER);
gtk_container_set_border_width (GTK_CONTAINER (dlg), 2);
gtk_window_set_icon_name (GTK_WINDOW (dlg), "applets-screenshooter");
/* Create the main box for the dialog */
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);
/* Create the frame for screenshot modes and fill it with the radio buttons */
modes_frame = gtk_frame_new (_("Modes"));
gtk_container_add (GTK_CONTAINER (vbox), modes_frame);
gtk_widget_show (modes_frame);
modes_box = gtk_vbox_new (FALSE, 8);
gtk_container_add (GTK_CONTAINER (modes_frame), modes_box);
gtk_container_set_border_width (GTK_CONTAINER (modes_box), 6);
gtk_widget_show (modes_box);
fullscreen_button =
gtk_radio_button_new_with_mnemonic (NULL,
_("Take a screenshot of desktop"));
gtk_widget_show (fullscreen_button);
gtk_box_pack_start (GTK_BOX (modes_box), fullscreen_button, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (fullscreen_button),
(sd->mode == FULLSCREEN));
g_signal_connect (fullscreen_button, "toggled",
G_CALLBACK (cb_fullscreen_screen_toggled),
sd);
active_window_button =
gtk_radio_button_new_with_mnemonic (gtk_radio_button_get_group (GTK_RADIO_BUTTON (fullscreen_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->mode == ACTIVE_WINDOW));
g_signal_connect (active_window_button, "toggled",
G_CALLBACK (cb_active_window_toggled),
sd);
/* Create the options frame and add the delay and save options */
options_frame = gtk_frame_new (_("Options"));
gtk_container_add(GTK_CONTAINER (vbox), options_frame);
gtk_widget_show (options_frame);
options_box = gtk_vbox_new (FALSE, 8);
gtk_container_add (GTK_CONTAINER (options_frame), options_box);
gtk_container_set_border_width (GTK_CONTAINER (options_box), 6);
gtk_widget_show (options_box);
/* Save option */
save_button = gtk_check_button_new_with_mnemonic (_("Show save dialog"));
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);
g_signal_connect (save_button, "toggled",
G_CALLBACK (cb_show_save_dialog_toggled), sd);
/* Default save location */
default_save_label = gtk_label_new ( "" );
gtk_label_set_markup (GTK_LABEL (default_save_label),
_("<span weight=\"bold\" stretch=\"semiexpanded\">Default save location</span>"));
gtk_misc_set_alignment (GTK_MISC (default_save_label), 0, 0);
gtk_widget_show (default_save_label);
gtk_container_add (GTK_CONTAINER (options_box), default_save_label);
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_container_add (GTK_CONTAINER (options_box), dir_chooser);
g_signal_connect (dir_chooser, "selection-changed",
G_CALLBACK (cb_default_folder), sd);
/* Screenshot delay */
delay_label = gtk_label_new ( "" );
gtk_label_set_markup (GTK_LABEL(delay_label),
_("<span weight=\"bold\" stretch=\"semiexpanded\">Delay before taking the screenshot</span>"));
gtk_misc_set_alignment(GTK_MISC (delay_label), 0, 0);
gtk_widget_show (delay_label);
gtk_container_add (GTK_CONTAINER (options_box), delay_label);
delay_box = gtk_hbox_new(FALSE, 8);
gtk_widget_show (delay_box);
gtk_box_pack_start (GTK_BOX (options_box), delay_box, FALSE, FALSE, 0);
delay_spinner = gtk_spin_button_new_with_range(0.0, 60.0, 1.0);
gtk_spin_button_set_value (GTK_SPIN_BUTTON (delay_spinner),
sd->delay);
gtk_widget_show (delay_spinner);
gtk_box_pack_start (GTK_BOX (delay_box), delay_spinner, FALSE,
FALSE, 0);
label2 = gtk_label_new_with_mnemonic(_("seconds"));
gtk_widget_show (label2);
gtk_box_pack_start (GTK_BOX (delay_box), label2, FALSE, FALSE, 0);
g_signal_connect (delay_spinner, "value-changed",
G_CALLBACK (cb_delay_spinner_changed), sd);
return dlg;
}
void screenshooter_preferences_dialog (gchar *rc_file,
gchar *current_default_dir)
{
GtkWidget * chooser;
gint dialog_response;
gchar * dir;
XfceRc *rc;
/* The preferences dialog is a plain gtk_file_chooser, we just get the
folder the user selected and write it in the conf file*/
chooser =
gtk_file_chooser_dialog_new (_("Default save folder"),
NULL,
GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
NULL);
gtk_window_set_icon_name (GTK_WINDOW (chooser), "applets-screenshooter");
gtk_dialog_set_default_response (GTK_DIALOG (chooser), GTK_RESPONSE_ACCEPT);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (chooser),
current_default_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));
}
/* $Id$
*
* Copyright © 2008 Jérôme Guelfucci <jerome.guelfucci@gmail.com>
*
* 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 "screenshooter-utils.h"
#include <gtk/gtk.h>
#include <libxfce4util/libxfce4util.h>
#include <libxfcegui4/libxfcegui4.h>
GtkWidget *screenshooter_dialog_new (ScreenshotData *sd);
void screenshooter_preferences_dialog (gchar *rc_file,
gchar *current_default_dir);
...@@ -289,7 +289,7 @@ active_window_toggled (GtkToggleButton *tb, PluginData *pd) ...@@ -289,7 +289,7 @@ active_window_toggled (GtkToggleButton *tb, PluginData *pd)
Get the value of the toggle button and set the delay option. Get the value of the toggle button and set the delay option.
*/ */
static void static void
cb_delay_spinner_changed(GtkWidget *spinner, PluginData *pd) cb_delay_spinner_changed (GtkWidget *spinner, PluginData *pd)
{ {
pd->sd->delay = pd->sd->delay =
gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner)); gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment