[Cxplorer-cvs 01358] CVS update: cxplorer/src

Back to archive index

Yasumichi Akahoshi yasum****@users*****
2005年 10月 15日 (土) 00:07:42 JST


Index: cxplorer/src/cxp-right-pane.c
diff -u cxplorer/src/cxp-right-pane.c:1.94.2.1 cxplorer/src/cxp-right-pane.c:1.94.2.2
--- cxplorer/src/cxp-right-pane.c:1.94.2.1	Fri Oct 14 17:11:46 2005
+++ cxplorer/src/cxp-right-pane.c	Sat Oct 15 00:07:42 2005
@@ -101,6 +101,10 @@
 					  GtkCellRenderer * cell,
 					  GtkTreeModel * tree_model,
 					  GtkTreeIter * iter, gpointer data);
+static void cxp_right_pane_draw_place (GtkTreeViewColumn * tree_column,
+					  GtkCellRenderer * cell,
+					  GtkTreeModel * tree_model,
+					  GtkTreeIter * iter, gpointer data);
 static void cxp_right_pane_draw_filetype (GtkTreeViewColumn * tree_column,
 					  GtkCellRenderer * cell,
 					  GtkTreeModel * tree_model,
@@ -375,6 +379,8 @@
 	column = gtk_tree_view_column_new ();
 	gtk_tree_view_column_set_title (column, _("Filename"));
 	gtk_tree_view_column_set_resizable (column, TRUE);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+	gtk_tree_view_column_set_fixed_width (column, 150);
 	gtk_tree_view_append_column (GTK_TREE_VIEW (file_list), column);
 	renderer = gtk_cell_renderer_pixbuf_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
@@ -394,6 +400,20 @@
 			  G_CALLBACK (cxp_right_pane_cell_edited), self);
 
 	/* 2nd column */
+	column = gtk_tree_view_column_new ();
+	gtk_tree_view_column_set_title (column, _("Place"));
+	gtk_tree_view_column_set_resizable (column, TRUE);
+	gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
+	gtk_tree_view_column_set_fixed_width (column, 150);
+	gtk_tree_view_append_column (GTK_TREE_VIEW (file_list), column);
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_set_cell_data_func (column, renderer,
+						 cxp_right_pane_draw_place,
+						 self, NULL);
+	gtk_tree_view_column_set_visible (column, FALSE);
+
+	/* 3rd column */
 	renderer = gtk_cell_renderer_text_new ();
 	g_object_set (renderer, "xalign", 1.0, NULL);
 	column = gtk_tree_view_column_new_with_attributes (_("Size"), renderer,
@@ -404,7 +424,7 @@
 	gtk_tree_view_column_set_sort_column_id (column, SORT_ID_SIZE);
 	gtk_tree_view_append_column (GTK_TREE_VIEW (file_list), column);
 
-	/* 3rd column */
+	/* 4th column */
 	renderer = gtk_cell_renderer_text_new ();
 	column = gtk_tree_view_column_new_with_attributes (_("Type"), renderer,
 							   NULL);
@@ -417,7 +437,7 @@
 	gtk_tree_view_column_set_sort_column_id (column, SORT_ID_TYPE);
 	gtk_tree_view_append_column (GTK_TREE_VIEW (file_list), column);
 
-	/* 4th column */
+	/* 5th column */
 	renderer = gtk_cell_renderer_text_new ();
 	column = gtk_tree_view_column_new_with_attributes (_("Update Time"),
 							   renderer, NULL);
@@ -612,6 +632,26 @@
 	g_free (fullpath);
 }
 
+static void cxp_right_pane_draw_place (GtkTreeViewColumn * tree_column,
+					  GtkCellRenderer * cell,
+					  GtkTreeModel * tree_model,
+					  GtkTreeIter * iter, gpointer data)
+{
+	gchar *fullpath;
+	gchar *place;
+
+	gtk_tree_model_get (tree_model, iter, FILE_LIST_COL_FULLPATH, &fullpath,
+			    -1);
+	if ((place = cxp_path_get_dirname_of_utf8 (fullpath)) == NULL)
+	{
+		place = g_strdup (_("(Invalid filename)"));
+	}
+
+	g_object_set (cell, "text", place, NULL);
+
+	g_free (fullpath);
+}
+
 static void cxp_right_pane_draw_filetype (GtkTreeViewColumn * tree_column,
 					  GtkCellRenderer * cell,
 					  GtkTreeModel * tree_model,
@@ -1075,10 +1115,13 @@
 	gchar *fullpath;
 	GDir *dir;
 	GtkTreeView *file_list;
+	GtkTreeViewColumn *column;
 	GtkTreeModel *model;
 	GtkTextBuffer *text_buffer;
 	gboolean show_dot_file;
 
+	column = gtk_tree_view_get_column (GTK_TREE_VIEW(priv->file_list), 1);
+	gtk_tree_view_column_set_visible (column, FALSE);
 	cur_dir = g_strdup (dirname);
 	show_dot_file =
 		gconf_client_get_bool (priv->client,
@@ -1653,3 +1696,56 @@
 
 	return	result;
 }
+
+void cxp_right_pane_search_file (CxpRightPane *right_pane, const gchar *cmd)
+{
+	CxpRightPanePrivate *priv = CXP_RIGHT_PANE_GET_PRIVATE (right_pane);
+	GIOChannel *channel;
+	GPid pid;
+	GtkTreeModel *model;
+	GtkTreeViewColumn *column;
+	GtkTreeIter iter;
+	gchar **args;
+	gchar *line;
+	gint sout;
+	GError *error = NULL;
+
+	column = gtk_tree_view_get_column (GTK_TREE_VIEW(priv->file_list), 1);
+	gtk_tree_view_column_set_visible (column, TRUE);
+
+	model = gtk_tree_view_get_model (GTK_TREE_VIEW(priv->file_list));
+	g_object_ref (model);
+	gtk_tree_view_set_model (GTK_TREE_VIEW(priv->file_list), NULL);
+	cxp_file_list_store_clear (CXP_FILE_LIST_STORE (model));
+	gtk_tree_view_set_model (GTK_TREE_VIEW(priv->file_list), model);
+	g_object_unref (model);
+
+	if (g_shell_parse_argv (cmd, NULL, &args, NULL))
+	{
+		if (g_spawn_async_with_pipes (NULL, args, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, NULL, &sout, NULL, &error))
+		{
+			channel = g_io_channel_unix_new (sout);
+			g_io_channel_set_encoding (channel, NULL, NULL);
+
+			while (g_io_channel_read_line (channel, &line, NULL, NULL, NULL) == G_IO_STATUS_NORMAL)
+			{
+				g_strchomp (line);
+				cxp_file_list_store_append_file (CXP_FILE_LIST_STORE(model), line, &iter);
+				if (GTK_WIDGET_VISIBLE(priv->file_list) && GTK_WIDGET_DRAWABLE(priv->file_list))
+					    gdk_window_process_updates(priv->file_list->window, FALSE);
+				g_free (line);
+			}
+			g_io_channel_shutdown (channel, FALSE, NULL);
+			g_io_channel_unref (channel);
+			g_spawn_close_pid (pid);
+		}
+		else
+		{
+			g_warning ("%s\n", error->message);
+		}
+	}
+	else
+	{
+			g_warning ("%s\n", error->message);
+	}
+}
Index: cxplorer/src/cxp-right-pane.h
diff -u cxplorer/src/cxp-right-pane.h:1.18 cxplorer/src/cxp-right-pane.h:1.18.2.1
--- cxplorer/src/cxp-right-pane.h:1.18	Sun Oct  2 02:50:01 2005
+++ cxplorer/src/cxp-right-pane.h	Sat Oct 15 00:07:42 2005
@@ -60,5 +60,6 @@
 void cxp_right_pane_send_file_to_command (CxpRightPane *right_pane, const gchar *cmd);
 void cxp_right_pane_set_cmd_request (CxpRightPane *right_pane);
 void cxp_right_pane_set_popup_menu (CxpRightPane *right_pane, GtkWidget *popup_menu);
+void cxp_right_pane_search_file (CxpRightPane *right_pane, const gchar *cmd);
 
 #endif /* CXP_RIGHT_PANE_H */
Index: cxplorer/src/cxplorer-window.c
diff -u cxplorer/src/cxplorer-window.c:1.67.2.1 cxplorer/src/cxplorer-window.c:1.67.2.2
--- cxplorer/src/cxplorer-window.c:1.67.2.1	Fri Oct 14 17:11:46 2005
+++ cxplorer/src/cxplorer-window.c	Sat Oct 15 00:07:42 2005
@@ -93,6 +93,7 @@
 static void cxplorer_window_dispose (GObject * obj);
 static void cxplorer_window_finalize (GObject * obj);
 static void cxplorer_window_entry_activate (GtkWidget *widget, gpointer user_data);
+static void cxplorer_window_search_entry_activate  (GtkWidget *widget, gpointer user_data);
 static void cxplorer_window_on_directory_changed (CxpDirView * dirview,
 						  gpointer user_data);
 static void cxplorer_window_on_dir_double_clicked (CxpRightPane * right_pane,
@@ -257,7 +258,10 @@
 	gtk_box_pack_start (GTK_BOX (hbox), private->scombo, FALSE, FALSE, 0);
 	gtk_combo_box_append_text (GTK_COMBO_BOX(private->scombo), "find");
 	gtk_combo_box_append_text (GTK_COMBO_BOX(private->scombo), "locate");
+	/*
 	gtk_combo_box_append_text (GTK_COMBO_BOX(private->scombo), "namazu");
+	*/
+	gtk_combo_box_set_active (GTK_COMBO_BOX(private->scombo), 0);
 	gtk_widget_show (private->scombo);
 	private->sentry = gtk_entry_new ();
 	gtk_box_pack_start (GTK_BOX (hbox), private->sentry, FALSE, FALSE, 0);
@@ -315,6 +319,9 @@
 	g_signal_connect (entry, "activate",
 			  G_CALLBACK (cxplorer_window_entry_activate),
 			  self);
+	g_signal_connect (private->sentry, "activate",
+			  G_CALLBACK (cxplorer_window_search_entry_activate),
+			  self);
 	g_signal_connect (dirview, "directory_changed",
 			  G_CALLBACK (cxplorer_window_on_directory_changed),
 			  self);
@@ -547,6 +554,41 @@
 	return window;
 }
 
+static void cxplorer_window_search_entry_activate  (GtkWidget *widget, gpointer user_data)
+{
+	CxplorerWindowPrivate *private = CXPLORER_WINDOW_GET_PRIVATE (user_data);
+	const gchar *pattern;
+	gchar *pat_locale;
+	gchar *cmd;
+	gchar *cur_dir;
+	gint index;
+
+	pattern = gtk_entry_get_text (GTK_ENTRY(private->sentry));
+	pat_locale = g_locale_from_utf8 (pattern, -1, NULL, NULL, NULL);
+	index = gtk_combo_box_get_active (GTK_COMBO_BOX(private->scombo));
+	switch (index)
+	{
+		case 0:
+			cur_dir = cxp_dir_view_get_current_directory (CXP_DIR_VIEW(private->dirview));
+			cmd = g_strdup_printf("find '%s' -iname '%s'", cur_dir, pat_locale);
+			g_free (cur_dir);
+			break;
+		case 1:
+			cmd = g_strdup_printf("locate '%s'", pat_locale);
+			break;
+		/*
+		case 2:
+			cmd = g_strdup_printf("namazu --list '%s'", pat_locale);
+			break;
+		*/
+		default:
+			return;
+	}
+	cxp_right_pane_search_file (CXP_RIGHT_PANE(private->right_pane), cmd);
+	g_free (cmd);
+	g_free (pat_locale);
+}
+
 /**
  * This function is called back when value of TextEntry is changed by user.
  * @param gwCaller [in] GtkWidget which call this function.


Cxplorer-cvs メーリングリストの案内
Back to archive index