[Xfce4-commits] <xfburn:master> Add dialog for files and folders.

David Mohr noreply at xfce.org
Sat Jul 7 07:24:10 CEST 2012


Updating branch refs/heads/master
         to e18bcd65f8b02514c8f1ef8ec96b183a721fa727 (commit)
       from 36050be23614f17422afa1e9f2bded7f5d8a5abf (commit)

commit e18bcd65f8b02514c8f1ef8ec96b183a721fa727
Author: David Mohr <david at mcbf.net>
Date:   Fri Jul 6 23:01:10 2012 -0600

    Add dialog for files and folders.
    
    Inspired by audacious' ui_fileopener.c

 xfburn/xfburn-data-composition.c |  125 ++++++++++++++++++++++++++------------
 1 files changed, 86 insertions(+), 39 deletions(-)

diff --git a/xfburn/xfburn-data-composition.c b/xfburn/xfburn-data-composition.c
index 6be43ef..d1a72da 100644
--- a/xfburn/xfburn-data-composition.c
+++ b/xfburn/xfburn-data-composition.c
@@ -117,7 +117,9 @@ static void action_create_directory (GtkAction *, XfburnDataComposition *);
 static void action_clear (GtkAction *, XfburnDataComposition *);
 static void action_remove_selection (GtkAction *, XfburnDataComposition *);
 static void action_rename_selection (GtkAction *, XfburnDataComposition *);
-static void action_add_selected_files (GtkAction *, XfburnDataComposition *);
+static void action_add_or_select (GtkAction *, XfburnDataComposition *);
+static void add_files (gchar * files, XfburnDataComposition *);
+static void add_cb (GtkWidget * widget, gpointer data);
 
 static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc);
 static void cb_treeview_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column, XfburnDataComposition * composition);
@@ -172,6 +174,8 @@ typedef struct
   GtkWidget *disc_usage;
   GtkWidget *progress;
   GtkTreeStore *model;
+  GtkWidget *add_filechooser;
+  GtkWidget *add_window;
 
   gchar *default_vol_name;
 
@@ -183,7 +187,7 @@ static guint instances = 0;
 
 static const GtkActionEntry action_entries[] = {
   {"add-file", GTK_STOCK_ADD, N_("Add"), NULL, N_("Add the selected file(s) to the composition"),
-   G_CALLBACK (action_add_selected_files),},
+   G_CALLBACK (action_add_or_select),},
   {"create-dir", GTK_STOCK_NEW, N_("Create directory"), NULL, N_("Add a new directory to the composition"),
    G_CALLBACK (action_create_directory),},
   {"remove-file", GTK_STOCK_REMOVE, N_("Remove"), NULL, N_("Remove the selected file(s) from the composition"),
@@ -896,49 +900,92 @@ action_remove_selection (GtkAction * action, XfburnDataComposition * dc)
   g_list_free (references);
 }
 
-
 static void
-action_add_selected_files (GtkAction *action, XfburnDataComposition *dc)
+add_cb (GtkWidget * widget, gpointer data)
 {
-  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
-  XfburnFileBrowser *browser = xfburn_main_window_get_file_browser (xfburn_main_window_get_instance ());
-  
-  gchar *selected_files = NULL;
+    XfburnDataComposition * dc = XFBURN_DATA_COMPOSITION(data);
+    XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+    gchar *selected_files = NULL;
   
-  xfburn_busy_cursor (priv->content);
+    GSList *list = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (priv->add_filechooser));
+    GString  * str = g_string_new(NULL);
+    GSList * curr;
+
+    for (curr = list; curr!=NULL; curr = curr->next) {
+        g_string_append(str, curr->data);
+        g_string_append_c(str, '\n');;
+    }
+
+    g_slist_free_full (list, g_free);
+    selected_files = str->str;
+    g_string_free (str, FALSE);
+    DBG("selected  files: %s ", selected_files);
+
+    gtk_widget_destroy (priv->add_window);
+
+    add_files (selected_files, dc);
+}
+
+static void
+select_files (XfburnDataComposition * dc)
+{
+    XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+
+    GtkWidget * window;
+    GtkWidget * add_button;
+    GtkWidget * vbox;
+    GtkWidget * bbox;
+
+    priv->add_window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_DIALOG);
+    gtk_window_set_title (GTK_WINDOW(window), _("File(s) to add to composition"));
+    gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); // GTK_WINDOW(xfburn_main_window_get_instance()),
+    gtk_container_set_border_width (GTK_CONTAINER(window), 10);
+    gtk_window_set_default_size(GTK_WINDOW(window), 600, 400);
+
+    priv->add_filechooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
+
+    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(priv->add_filechooser), TRUE);
+
+    vbox = gtk_vbox_new (FALSE, 0);
+    gtk_container_add(GTK_CONTAINER(window), vbox);
+
+    gtk_box_pack_start(GTK_BOX(vbox), priv->add_filechooser, TRUE, TRUE, 3);
+
+    add_button = gtk_button_new_with_label (_("Add"));
+    g_signal_connect (add_button, "clicked", G_CALLBACK(add_cb), dc);
+    g_signal_connect (priv->add_filechooser, "file-activated", G_CALLBACK(add_cb), dc);
+
+    bbox = gtk_hbutton_box_new ();
+    gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
+    gtk_box_pack_end(GTK_BOX(vbox), bbox, FALSE, FALSE, 3);
+
+    gtk_box_pack_end(GTK_BOX(bbox), add_button, FALSE, FALSE, 3);
+
+    g_signal_connect(window, "destroy",
+                     G_CALLBACK(gtk_widget_destroyed), &window);
+
+    gtk_widget_show_all (window);
+}
+
+static void
+action_add_or_select (GtkAction *action, XfburnDataComposition *dc)
+{
   if (xfburn_settings_get_boolean("show-filebrowser", FALSE)) {
-    selected_files = xfburn_file_browser_get_selection (browser);
+    XfburnFileBrowser *browser = xfburn_main_window_get_file_browser (xfburn_main_window_get_instance ());
+  
+    add_files (xfburn_file_browser_get_selection (browser), dc);
   } else {
-    GtkWidget * dialog;
-
-    dialog = gtk_file_chooser_dialog_new (_("File(s) to add to composition"),
-                                          GTK_WINDOW(xfburn_main_window_get_instance()),
-                                          GTK_FILE_CHOOSER_ACTION_OPEN,
-                                          _("Add"),
-                                          GTK_RESPONSE_ACCEPT,
-                                          NULL);
-    gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER(dialog), TRUE);
-
-    if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) {
-        GSList *list = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (dialog));
-        GString  * str = g_string_new(NULL);
-        GSList * curr;
-
-        for (curr = list; curr!=NULL; curr = curr->next) {
-            g_string_append(str, curr->data);
-            g_string_append_c(str, '\n');;
-        }
+    select_files(dc);
+  }
+}
 
-        g_slist_free_full (list, g_free);
-        selected_files = str->str;
-        g_string_free (str, FALSE);
-        DBG("selected  files: %s ", selected_files);
+static void
+add_files(gchar * selected_files, XfburnDataComposition *dc)
+{
+  XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
 
-      //selected_files = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
-    }
-    gtk_widget_destroy (dialog);
-  }
-  
+  xfburn_busy_cursor (priv->content);
   if (selected_files) {
     GtkTreeSelection *selection;
     GList *selected_paths = NULL;


More information about the Xfce4-commits mailing list