[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