[Xfce4-commits] r22644 - xfburn/trunk/xfburn
Jean-François Wauthy
pollux at xfce.org
Thu Aug 3 20:07:00 UTC 2006
Author: pollux
Date: 2006-08-03 20:06:57 +0000 (Thu, 03 Aug 2006)
New Revision: 22644
Modified:
xfburn/trunk/xfburn/xfburn-data-composition.c
xfburn/trunk/xfburn/xfburn-data-disc-usage.c
xfburn/trunk/xfburn/xfburn-directory-browser.c
xfburn/trunk/xfburn/xfburn-directory-browser.h
xfburn/trunk/xfburn/xfburn-file-browser.c
xfburn/trunk/xfburn/xfburn-file-browser.h
xfburn/trunk/xfburn/xfburn-fs-browser.c
xfburn/trunk/xfburn/xfburn-fs-browser.h
xfburn/trunk/xfburn/xfburn-main-window.c
xfburn/trunk/xfburn/xfburn-main-window.h
Log:
implement the add button in the data composition toolbar
Modified: xfburn/trunk/xfburn/xfburn-data-composition.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-composition.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-data-composition.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -72,9 +72,11 @@
static void data_composition_action_clear (GtkAction *, XfburnDataComposition *);
static void data_composition_action_remove_selection (GtkAction *, XfburnDataComposition *);
-static void data_composition_action_rename_selection (GtkAction * action, XfburnDataComposition * dc);
+static void data_composition_action_rename_selection (GtkAction *, XfburnDataComposition *);
+static void data_composition_action_add_selected_files (GtkAction *, XfburnDataComposition *);
static gboolean cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc);
+static void cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc);
static void cb_begin_burn (XfburnDataDiscUsage * du, XfburnDataComposition * dc);
static void cell_file_edited_cb (GtkCellRenderer * renderer, gchar * path, gchar * newtext, XfburnDataComposition * dc);
@@ -129,7 +131,8 @@
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 CD"),},
+ {"add-file", GTK_STOCK_ADD, N_("Add"), NULL, N_("Add the selected file(s) to the CD"),
+ G_CALLBACK (data_composition_action_add_selected_files),},
{"remove-file", GTK_STOCK_REMOVE, N_("Remove"), NULL, N_("Remove the selected file(s) from the CD"),
G_CALLBACK (data_composition_action_remove_selection),},
{"clear", GTK_STOCK_CLEAR, N_("Clear"), NULL, N_("Clear the content of the CD"),
@@ -219,7 +222,8 @@
GtkTreeViewColumn *column_file;
GtkCellRenderer *cell_icon, *cell_file;
GtkTreeSelection *selection;
-
+ GtkAction *action = NULL;
+
const gchar ui_string[] = "<ui> <popup name=\"popup-menu\">"
"<menuitem action=\"rename-file\"/>" "<menuitem action=\"remove-file\"/>" "</popup></ui>";
@@ -329,6 +333,7 @@
g_signal_connect (G_OBJECT (priv->content), "button-press-event",
G_CALLBACK (cb_treeview_button_pressed), composition);
+ g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_selection_changed), composition);
#if 0
/* adding progress window */
@@ -350,6 +355,11 @@
GDK_ACTION_COPY | GDK_ACTION_MOVE);
g_signal_connect (G_OBJECT (priv->content), "drag-data-received", G_CALLBACK (content_drag_data_rcv_cb),
composition);
+
+ action = gtk_action_group_get_action (priv->action_group, "remove-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+ action = gtk_action_group_get_action (priv->action_group, "clear");
+ gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
}
static void
@@ -407,6 +417,38 @@
g_free (tmpfile);
}
+static void
+cb_selection_changed (GtkTreeSelection *selection, XfburnDataComposition * dc)
+{
+ XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
+ gint n_selected_rows;
+ GtkAction *action = NULL;
+
+
+ n_selected_rows = gtk_tree_selection_count_selected_rows (selection);
+ if (n_selected_rows == 0) {
+ action = gtk_action_group_get_action (priv->action_group, "add-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ action = gtk_action_group_get_action (priv->action_group, "remove-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+ action = gtk_action_group_get_action (priv->action_group, "clear");
+ gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+ } else if (n_selected_rows == 1) {
+ action = gtk_action_group_get_action (priv->action_group, "add-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ action = gtk_action_group_get_action (priv->action_group, "remove-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ action = gtk_action_group_get_action (priv->action_group, "clear");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ } else {
+ action = gtk_action_group_get_action (priv->action_group, "add-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), FALSE);
+ action = gtk_action_group_get_action (priv->action_group, "remove-file");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ action = gtk_action_group_get_action (priv->action_group, "clear");
+ gtk_action_set_sensitive (GTK_ACTION (action), TRUE);
+ }
+}
static gboolean
cb_treeview_button_pressed (GtkTreeView * treeview, GdkEventButton * event, XfburnDataComposition * dc)
@@ -630,6 +672,72 @@
}
static void
+data_composition_action_add_selected_files (GtkAction *action, XfburnDataComposition *dc)
+{
+ 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;
+
+ selected_files = xfburn_file_browser_get_selection (browser);
+
+ if (selected_files) {
+ GtkTreeModel *model;
+ const gchar * file = NULL;
+ GtkTreeSelection *selection;
+ GList *selected_paths = NULL;
+ GtkTreePath *path_where_insert = NULL;
+ GtkTreeIter iter_where_insert;
+ DataCompositionType type = DATA_COMPOSITION_TYPE_FILE;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->content));
+ selected_paths = gtk_tree_selection_get_selected_rows (selection, NULL);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->content));
+
+ if (selected_paths) {
+ path_where_insert = (GtkTreePath *) (selected_paths->data);
+
+ gtk_tree_model_get_iter (model, &iter_where_insert, path_where_insert);
+ gtk_tree_model_get (model, &iter_where_insert, DATA_COMPOSITION_COLUMN_TYPE, &type, -1);
+ }
+
+ file = strtok (selected_files, "\n");
+ while (file) {
+ GtkTreeIter iter;
+ gchar *full_path = NULL;
+
+ if (g_str_has_prefix (file, "file://"))
+ full_path = g_build_filename (&file[7], NULL);
+ else if (g_str_has_prefix (file, "file:"))
+ full_path = g_build_filename (&file[5], NULL);
+ else
+ full_path = g_build_filename (file, NULL);
+
+ if (full_path[strlen (full_path) - 1] == '\r')
+ full_path[strlen (full_path) - 1] = '\0';
+
+ /* add files to the disc content */
+ if (type == DATA_COMPOSITION_TYPE_DIRECTORY) {
+ add_file_to_list (dc, model, full_path, &iter, &iter_where_insert, GTK_TREE_VIEW_DROP_INTO_OR_AFTER);
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->content), path_where_insert, FALSE);
+ } else {
+ add_file_to_list (dc, model, full_path, &iter, NULL, GTK_TREE_VIEW_DROP_AFTER);
+ }
+
+ g_free (full_path);
+
+ file = strtok (NULL, "\n");
+ }
+
+ g_list_foreach (selected_paths, (GFunc) gtk_tree_path_free, NULL);
+ g_list_free (selected_paths);
+
+ g_free (selected_files);
+ }
+
+}
+
+static void
data_composition_action_clear (GtkAction * action, XfburnDataComposition * dc)
{
XfburnDataCompositionPrivate *priv = XFBURN_DATA_COMPOSITION_GET_PRIVATE (dc);
Modified: xfburn/trunk/xfburn/xfburn-data-disc-usage.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-data-disc-usage.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-data-disc-usage.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -126,7 +126,7 @@
gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->combo, FALSE, FALSE, BORDER);
gtk_widget_show (disc_usage->combo);
- disc_usage->button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("Burn Data CD"));
+ disc_usage->button = xfce_create_mixed_button (GTK_STOCK_CDROM, _("Burn composition"));
gtk_box_pack_start (GTK_BOX (disc_usage), disc_usage->button, FALSE, FALSE, BORDER);
gtk_widget_set_sensitive (disc_usage->button, FALSE);
gtk_widget_show (disc_usage->button);
Modified: xfburn/trunk/xfburn/xfburn-directory-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -189,38 +189,10 @@
GtkSelectionData * data, guint info, guint time, gpointer user_data)
{
if (info == DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN) {
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GList *selected_rows;
- gchar *full_paths;
+ gchar *full_paths = NULL;
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-
- full_paths = g_strdup ("");
- selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
- selected_rows = g_list_last (selected_rows);
- while (selected_rows) {
- GtkTreeIter iter;
- gchar *current_path;
- gchar *temp;
-
- gtk_tree_model_get_iter (model, &iter, (GtkTreePath *) selected_rows->data);
- gtk_tree_model_get (model, &iter, DIRECTORY_BROWSER_COLUMN_PATH, ¤t_path, -1);
-
- temp = g_strdup_printf ("file://%s\n%s", current_path, full_paths);
- g_free (current_path);
- g_free (full_paths);
- full_paths = temp;
-
- selected_rows = g_list_previous (selected_rows);
- }
-
- selected_rows = g_list_first (selected_rows);
- g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (selected_rows);
-
+ full_paths = xfburn_directory_browser_get_selection (XFBURN_DIRECTORY_BROWSER (widget));
gtk_selection_data_set_text (data, full_paths, -1);
-
g_free (full_paths);
}
}
@@ -351,3 +323,38 @@
xfburn_directory_browser_load_path (browser, (const gchar*) temp);
g_free (temp);
}
+
+gchar *
+xfburn_directory_browser_get_selection (XfburnDirectoryBrowser * browser)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GList *selected_rows;
+ gchar *full_paths = NULL;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
+
+ selected_rows = gtk_tree_selection_get_selected_rows (selection, &model);
+ selected_rows = g_list_last (selected_rows);
+ while (selected_rows) {
+ GtkTreeIter iter;
+ gchar *current_path = NULL;
+ gchar *temp = NULL;
+
+ gtk_tree_model_get_iter (model, &iter, (GtkTreePath *) selected_rows->data);
+ gtk_tree_model_get (model, &iter, DIRECTORY_BROWSER_COLUMN_PATH, ¤t_path, -1);
+
+ temp = g_strdup_printf ("file://%s\n%s", current_path, full_paths ? full_paths : "");
+ g_free (current_path);
+ g_free (full_paths);
+ full_paths = temp;
+
+ selected_rows = g_list_previous (selected_rows);
+ }
+
+ selected_rows = g_list_first (selected_rows);
+ g_list_foreach (selected_rows, (GFunc) gtk_tree_path_free, NULL);
+ g_list_free (selected_rows);
+
+ return full_paths;
+}
Modified: xfburn/trunk/xfburn/xfburn-directory-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-directory-browser.h 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-directory-browser.h 2006-08-03 20:06:57 UTC (rev 22644)
@@ -60,9 +60,13 @@
GtkType xfburn_directory_browser_get_type (void);
+
GtkWidget *xfburn_directory_browser_new (void);
+
void xfburn_directory_browser_load_path (XfburnDirectoryBrowser * browser, const gchar * path);
void xfburn_directory_browser_refresh (XfburnDirectoryBrowser * browser);
+gchar *xfburn_directory_browser_get_selection (XfburnDirectoryBrowser * browser);
+
G_END_DECLS
#endif
Modified: xfburn/trunk/xfburn/xfburn-file-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-file-browser.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-file-browser.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -111,6 +111,7 @@
xfburn_directory_browser_load_path (XFBURN_DIRECTORY_BROWSER (file_browser->directory_browser), xfce_get_homedir ());
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (file_browser->fs_browser));
+
g_signal_connect (G_OBJECT (selection), "changed", G_CALLBACK (cb_fs_browser_selection_changed), file_browser);
g_signal_connect (G_OBJECT (file_browser->directory_browser), "row-activated",
@@ -201,3 +202,14 @@
// TODO refresh fs browser
xfburn_directory_browser_refresh (XFBURN_DIRECTORY_BROWSER (browser->directory_browser));
}
+
+gchar *
+xfburn_file_browser_get_selection (XfburnFileBrowser *browser)
+{
+ if (GTK_WIDGET_HAS_FOCUS (browser->fs_browser))
+ return xfburn_fs_browser_get_selection (browser->fs_browser);
+ else if (GTK_WIDGET_HAS_FOCUS (browser->directory_browser))
+ return xfburn_directory_browser_get_selection (browser->directory_browser);
+
+ return NULL;
+}
Modified: xfburn/trunk/xfburn/xfburn-file-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-file-browser.h 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-file-browser.h 2006-08-03 20:06:57 UTC (rev 22644)
@@ -50,8 +50,11 @@
};
GtkType xfburn_file_browser_get_type (void);
+
GtkWidget *xfburn_file_browser_new (void);
+
void xfburn_file_browser_refresh (XfburnFileBrowser *browser);
+gchar *xfburn_file_browser_get_selection (XfburnFileBrowser *browser);
G_END_DECLS
#endif
Modified: xfburn/trunk/xfburn/xfburn-fs-browser.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-fs-browser.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-fs-browser.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -38,7 +38,7 @@
static void cb_browser_row_expanded (GtkTreeView *, GtkTreeIter *, GtkTreePath *, gpointer);
static void cb_browser_row_activated (GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data);
-static void cb_browser_drag_data_get (GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, gpointer);
+static void cb_browser_drag_data_get (GtkWidget *, GdkDragContext *, GtkSelectionData *, guint, guint, XfburnFsBrowser *);
/* globals */
static GtkTreeViewClass *parent_class = NULL;
@@ -203,25 +203,13 @@
static void
cb_browser_drag_data_get (GtkWidget * widget, GdkDragContext * dc,
- GtkSelectionData * data, guint info, guint time, gpointer user_data)
+ GtkSelectionData * data, guint info, guint time, XfburnFsBrowser *browser)
{
if (info == DATA_COMPOSITION_DND_TARGET_TEXT_PLAIN) {
- GtkTreeSelection *selection;
- GtkTreeModel *model;
- GtkTreeIter iter;
- gchar *path;
- gchar *full_path;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
- gtk_tree_selection_get_selected (selection, &model, &iter);
-
- gtk_tree_model_get (model, &iter, FS_BROWSER_COLUMN_PATH, &path, -1);
-
- full_path = g_strdup_printf ("file://%s", path);
- g_free (path);
-
+ gchar *full_path = NULL;
+
+ full_path = xfburn_fs_browser_get_selection (browser);
gtk_selection_data_set_text (data, full_path, -1);
-
g_free (full_path);
}
}
@@ -283,3 +271,25 @@
gtk_tree_view_expand_row (GTK_TREE_VIEW (browser), path, FALSE);
gtk_tree_path_free (path);
}
+
+gchar *
+xfburn_fs_browser_get_selection (XfburnFsBrowser *browser)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ gchar *full_path = NULL;
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (browser));
+ if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
+ gchar *path = NULL;
+
+ gtk_tree_model_get (model, &iter, FS_BROWSER_COLUMN_PATH, &path, -1);
+
+ full_path = g_strdup_printf ("file://%s", path);
+ g_free (path);
+ }
+
+ return full_path;
+}
Modified: xfburn/trunk/xfburn/xfburn-fs-browser.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-fs-browser.h 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-fs-browser.h 2006-08-03 20:06:57 UTC (rev 22644)
@@ -52,8 +52,11 @@
};
GType xfburn_fs_browser_get_type ();
+
GtkWidget *xfburn_fs_browser_new ();
-void xfburn_fs_browser_refresh (XfburnFsBrowser *);
+void xfburn_fs_browser_refresh (XfburnFsBrowser *browser);
+gchar * xfburn_fs_browser_get_selection (XfburnFsBrowser *browser);
+
G_END_DECLS
#endif /* __XFBURN_FS_BROWSER_H__ */
Modified: xfburn/trunk/xfburn/xfburn-main-window.c
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.c 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-main-window.c 2006-08-03 20:06:57 UTC (rev 22644)
@@ -595,3 +595,11 @@
return priv->ui_manager;
}
+
+XfburnFileBrowser *
+xfburn_main_window_get_file_browser (XfburnMainWindow *window)
+{
+ XfburnMainWindowPrivate *priv = XFBURN_MAIN_WINDOW_GET_PRIVATE (window);
+
+ return XFBURN_FILE_BROWSER (priv->file_browser);
+}
Modified: xfburn/trunk/xfburn/xfburn-main-window.h
===================================================================
--- xfburn/trunk/xfburn/xfburn-main-window.h 2006-08-03 17:58:30 UTC (rev 22643)
+++ xfburn/trunk/xfburn/xfburn-main-window.h 2006-08-03 20:06:57 UTC (rev 22644)
@@ -27,6 +27,7 @@
#include <gtk/gtk.h>
#include "xfburn-data-composition.h"
+#include "xfburn-file-browser.h"
G_BEGIN_DECLS
#define XFBURN_TYPE_MAIN_WINDOW (xfburn_main_window_get_type ())
@@ -54,6 +55,7 @@
XfburnMainWindow *xfburn_main_window_get_instance (void);
GtkUIManager *xfburn_main_window_get_ui_manager (XfburnMainWindow *window);
+XfburnFileBrowser *xfburn_main_window_get_file_browser (XfburnMainWindow *window);
G_END_DECLS
#endif
More information about the Xfce4-commits
mailing list