[Goodies-commits] r5510 - in xfce4-screenshooter-plugin/trunk: . src
Jerome Guelfucci
jeromeg at xfce.org
Sat Oct 4 17:48:32 CEST 2008
Author: jeromeg
Date: 2008-10-04 15:48:32 +0000 (Sat, 04 Oct 2008)
New Revision: 5510
Modified:
xfce4-screenshooter-plugin/trunk/ChangeLog
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
Log:
Code cleanup and refactoring.
Modified: xfce4-screenshooter-plugin/trunk/ChangeLog
===================================================================
--- xfce4-screenshooter-plugin/trunk/ChangeLog 2008-10-04 01:09:21 UTC (rev 5509)
+++ xfce4-screenshooter-plugin/trunk/ChangeLog 2008-10-04 15:48:32 UTC (rev 5510)
@@ -1,3 +1,18 @@
+2008-10-04 jeromeg
+
+ * Partially refactor the code:
+ - screenshooter-utils.{c,h}:
+ - simplify some variable names.
+ - use an enum for screenshot modes.
+ - (take_screenshot) and (save_screenshot) do not depend anymore on the
+ backend.
+ - main.c:
+ - updated to use the new functions and structs' variables.
+ - move some code from (main) to (screenshooter_preferences_dialog).
+ - screenshooter-plugin.c:
+ - updated to use the new functions and structs' variables.
+ - use cb_ callbacks names rather than funky ones.
+
2008-10-02 jeromeg
* src/screenshooter-utils.c: in (take_screenshot), don't crash when taking a
Modified: xfce4-screenshooter-plugin/trunk/src/main.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/main.c 2008-10-04 01:09:21 UTC (rev 5509)
+++ xfce4-screenshooter-plugin/trunk/src/main.c 2008-10-04 15:48:32 UTC (rev 5510)
@@ -71,6 +71,46 @@
+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)
{
GError *cli_error = NULL;
@@ -79,6 +119,8 @@
XfceRc *rc;
gchar *rc_file;
+ xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
+
/* Get the path to the conf file */
rc_file = g_build_filename (xfce_get_homedir(), ".config", "xfce4",
"xfce4-screenshooter", NULL);
@@ -96,9 +138,7 @@
{
sd->screenshot_dir = g_strdup (DEFAULT_SAVE_DIRECTORY);
}
-
- xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8");
-
+
/* Print a message to advise to use help when a non existing cli option is
passed to the executable. */
if (!gtk_init_with_args(&argc, &argv, _(""), entries, PACKAGE, &cli_error))
@@ -123,11 +163,11 @@
the desktop.*/
if (window)
{
- sd->whole_screen = 0;
+ sd->mode = ACTIVE_WINDOW;
}
else
{
- sd->whole_screen = 1;
+ sd->mode = FULLSCREEN;
}
/* Wether to show the save dialog allowing to choose a filename and a save
@@ -141,7 +181,7 @@
sd->show_save_dialog = 1;
}
- sd->screenshot_delay = delay;
+ sd->delay = delay;
/* If the user gave a directory name, verify that it is valid */
if (screenshot_dir != NULL)
@@ -172,45 +212,14 @@
with the given options */
if (!preferences)
{
- screenshot = take_screenshot (sd);
- save_screenshot (screenshot, sd);
+ screenshot = take_screenshot (sd->mode, sd->delay);
+ save_screenshot (screenshot, sd->show_save_dialog, sd->screenshot_dir);
g_object_unref (screenshot);
}
else
{
- GtkWidget * chooser;
- gint dialog_response;
- gchar * dir;
-
- /* 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),
- sd->screenshot_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));
+ screenshooter_preferences_dialog (rc_file, sd->screenshot_dir);
}
g_free (sd->screenshot_dir);
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c 2008-10-04 01:09:21 UTC (rev 5509)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-plugin.c 2008-10-04 15:48:32 UTC (rev 5510)
@@ -72,7 +72,7 @@
static void show_save_dialog_toggled (GtkToggleButton *tb, PluginData *pd);
static void whole_screen_toggled (GtkToggleButton *tb, PluginData *pd);
static void active_window_toggled (GtkToggleButton *tb, PluginData *pd);
-static void screenshot_delay_spinner_changed (GtkWidget *spinner,
+static void cb_delay_spinner_changed (GtkWidget *spinner,
PluginData *pd);
static void cb_default_folder (GtkWidget *chooser, PluginData *pd);
static void screenshot_dialog_response (GtkWidget *dlg, int reponse,
@@ -141,9 +141,10 @@
gtk_widget_set_sensitive (GTK_WIDGET (pd->button), FALSE);
/* Get the screenshot */
- screenshot = take_screenshot (pd->sd);
+ screenshot = take_screenshot (pd->sd->mode, pd->sd->delay);
- save_screenshot (screenshot, pd->sd);
+ save_screenshot (screenshot, pd->sd->show_save_dialog,
+ pd->sd->screenshot_dir);
gtk_widget_set_sensitive (GTK_WIDGET (pd->button), TRUE);
@@ -174,8 +175,8 @@
{
char *file;
XfceRc *rc;
- gint screenshot_delay = 0;
- gint whole_screen = 1;
+ gint delay = 0;
+ gint mode = FULLSCREEN;
gint show_save_dialog = 1;
gchar *screenshot_dir = g_strdup (DEFAULT_SAVE_DIRECTORY);
@@ -186,8 +187,8 @@
if ( rc != NULL)
{
- screenshot_delay = xfce_rc_read_int_entry (rc, "screenshot_delay", 0);
- whole_screen = xfce_rc_read_int_entry (rc, "whole_screen", 1);
+ delay = xfce_rc_read_int_entry (rc, "delay", 0);
+ mode = xfce_rc_read_int_entry (rc, "mode", FULLSCREEN);
show_save_dialog = xfce_rc_read_int_entry (rc, "show_save_dialog", 1);
screenshot_dir =
g_strdup (xfce_rc_read_entry (rc,
@@ -200,8 +201,8 @@
}
/* And set the pd values */
- pd->sd->screenshot_delay = screenshot_delay;
- pd->sd->whole_screen = whole_screen;
+ pd->sd->delay = delay;
+ pd->sd->mode = mode;
pd->sd->show_save_dialog = show_save_dialog;
pd->sd->screenshot_dir = screenshot_dir;
}
@@ -227,8 +228,8 @@
if (!rc)
return;
- 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, "delay", pd->sd->delay);
+ xfce_rc_write_int_entry (rc, "mode", pd->sd->mode);
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);
@@ -254,7 +255,14 @@
static void
whole_screen_toggled (GtkToggleButton *tb, PluginData *pd)
{
- pd->sd->whole_screen = gtk_toggle_button_get_active (tb);
+ if (gtk_toggle_button_get_active (tb))
+ {
+ pd->sd->mode = FULLSCREEN;
+ }
+ else
+ {
+ pd->sd->mode = ACTIVE_WINDOW;
+ }
}
@@ -265,7 +273,14 @@
static void
active_window_toggled (GtkToggleButton *tb, PluginData *pd)
{
- pd->sd->whole_screen = !gtk_toggle_button_get_active (tb);
+ if (gtk_toggle_button_get_active (tb))
+ {
+ pd->sd->mode = ACTIVE_WINDOW;
+ }
+ else
+ {
+ pd->sd->mode = FULLSCREEN;
+ }
}
@@ -274,9 +289,9 @@
Get the value of the toggle button and set the delay option.
*/
static void
-screenshot_delay_spinner_changed(GtkWidget *spinner, PluginData *pd)
+cb_delay_spinner_changed(GtkWidget *spinner, PluginData *pd)
{
- pd->sd->screenshot_delay =
+ pd->sd->delay =
gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (spinner));
}
@@ -308,7 +323,7 @@
/* Update tooltips according to the chosen option */
#if GTK_CHECK_VERSION(2,12,0)
- if (pd->sd->whole_screen)
+ if (pd->sd->mode == FULLSCREEN)
{
gtk_widget_set_tooltip_text (GTK_WIDGET (pd->button),
_("Take a screenshot of desktop"));
@@ -335,7 +350,7 @@
GtkWidget *options_frame, *modes_frame, *delay_box, *options_box, *modes_box;
GtkWidget *save_button, *desktop_button, *active_window_button;
GtkWidget *dir_chooser, *default_save_label, *delay_label;
- GtkWidget *screenshot_delay_spinner;
+ GtkWidget *delay_spinner;
/* Block the menu to prevent the user from launching several dialogs at
the same time */
@@ -382,7 +397,7 @@
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),
- pd->sd->whole_screen);
+ (pd->sd->mode == FULLSCREEN));
g_signal_connect (desktop_button, "toggled",
G_CALLBACK (whole_screen_toggled),
pd);
@@ -393,7 +408,7 @@
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),
- !pd->sd->whole_screen);
+ (pd->sd->mode == ACTIVE_WINDOW));
g_signal_connect (active_window_button, "toggled",
G_CALLBACK (active_window_toggled),
pd);
@@ -447,19 +462,19 @@
gtk_widget_show (delay_box);
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),
- pd->sd->screenshot_delay);
- gtk_widget_show (screenshot_delay_spinner);
- gtk_box_pack_start (GTK_BOX (delay_box), screenshot_delay_spinner, FALSE,
+ delay_spinner = gtk_spin_button_new_with_range(0.0, 60.0, 1.0);
+ gtk_spin_button_set_value (GTK_SPIN_BUTTON (delay_spinner),
+ pd->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 (screenshot_delay_spinner, "value-changed",
- G_CALLBACK (screenshot_delay_spinner_changed), pd);
+ g_signal_connect (delay_spinner, "value-changed",
+ G_CALLBACK (cb_delay_spinner_changed), pd);
gtk_widget_show (dlg);
}
@@ -492,7 +507,7 @@
/* Set the tooltips if available */
#if GTK_CHECK_VERSION(2,12,0)
- if ( pd->sd->whole_screen )
+ if (pd->sd->mode == FULLSCREEN)
{
gtk_widget_set_tooltip_text (GTK_WIDGET (pd->button),
_("Take a screenshot of desktop"));
Modified: xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c
===================================================================
--- xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-10-04 01:09:21 UTC (rev 5509)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.c 2008-10-04 15:48:32 UTC (rev 5510)
@@ -125,10 +125,10 @@
*sd: a ScreenshotData struct.
returns: the screenshot in a *GdkPixbuf.
*/
-GdkPixbuf *take_screenshot (ScreenshotData *sd)
+GdkPixbuf *take_screenshot (gint mode, gint delay)
{
GdkPixbuf *screenshot;
- GdkWindow *window;
+ GdkWindow *window = NULL;
GdkScreen *screen;
gint width;
@@ -141,12 +141,12 @@
screen = gdk_screen_get_default ();
/* Get the window/desktop we want to screenshot*/
- if (sd->whole_screen)
+ if (mode == FULLSCREEN)
{
window = gdk_get_default_root_window ();
needs_unref = FALSE;
}
- else
+ else if (mode == ACTIVE_WINDOW)
{
window = gdk_screen_get_active_window (screen);
@@ -166,7 +166,7 @@
}
/* wait for n=delay seconds */
- sleep (sd->screenshot_delay);
+ sleep (delay);
/* get the size of the part of the screen we want to screenshot */
gdk_drawable_get_size(window, &width, &height);
@@ -188,7 +188,8 @@
/* Saves the screenshot according to the options in sd.
*screenshot: a GdkPixbuf containing our screenshot
*sd: a ScreenshotData struct containing the save options.*/
-void save_screenshot (GdkPixbuf *screenshot, ScreenshotData *sd)
+void save_screenshot (GdkPixbuf *screenshot, gboolean show_save_dialog,
+ gchar * default_dir)
{
GdkPixbuf * thumbnail;
gchar * filename = NULL;
@@ -196,9 +197,9 @@
GtkWidget * chooser;
gint dialog_response;
- filename = generate_filename_for_uri (sd->screenshot_dir);
+ filename = generate_filename_for_uri (default_dir);
- if (sd->show_save_dialog)
+ if (show_save_dialog)
{
/* If the user wants a save dialog, we run it, and grab the filename
the user has chosen. */
@@ -216,7 +217,7 @@
gtk_dialog_set_default_response (GTK_DIALOG (chooser),
GTK_RESPONSE_ACCEPT);
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (chooser),
- sd->screenshot_dir);
+ default_dir);
preview = gtk_image_new ();
@@ -249,8 +250,9 @@
else
{
/* Else, we just save the file in the default folder */
- filename = g_build_filename (sd->screenshot_dir, filename, NULL);
+ filename = g_build_filename (default_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-10-04 01:09:21 UTC (rev 5509)
+++ xfce4-screenshooter-plugin/trunk/src/screenshooter-utils.h 2008-10-04 15:48:32 UTC (rev 5510)
@@ -31,16 +31,23 @@
#define DEFAULT_SAVE_DIRECTORY xfce_get_homedir ()
+enum {
+ MODE_0,
+ FULLSCREEN,
+ ACTIVE_WINDOW,
+};
+
/* Struct to store the screenshot options */
typedef struct
{
- gint whole_screen;
+ gint mode;
gint show_save_dialog;
- gint screenshot_delay;
+ gint delay;
gchar *screenshot_dir;
}
ScreenshotData;
-GdkPixbuf *take_screenshot (ScreenshotData *sd);
-void save_screenshot (GdkPixbuf *screenshot, ScreenshotData *sd);
+GdkPixbuf *take_screenshot (gint mode, gint delay);
+void save_screenshot (GdkPixbuf *screenshot, gboolean show_save_dialog,
+ gchar * default_dir);
More information about the Goodies-commits
mailing list