[nautilus-open-terminal] Prepare 0.11 release. Remove eel dependency.



commit aa73d649c98a197ebedcf567ceffa77b20ce6138
Author: Christian Neumair <cnmeumair gnome org>
Date:   Sat May 16 14:09:03 2009 +0200

    Prepare 0.11 release. Remove eel dependency.
    
    Do not depend on libeel anymore, since it is linked statically into Nautilus.
    Instead, import the required helpers. Thanks to Julien Valroff <julien kirya net>.
---
 NEWS                         |   10 ++-
 TODO                         |    8 +-
 configure.in                 |    2 +-
 src/Makefile.am              |    3 +
 src/eel-gnome-extensions.c   |  196 ++++++++++++++++++++++++++++++++++++++++++
 src/eel-gnome-extensions.h   |   44 ++++++++++
 src/nautilus-open-terminal.c |    5 +-
 7 files changed, 260 insertions(+), 8 deletions(-)

diff --git a/NEWS b/NEWS
index 9617f26..ce4e8af 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,14 @@
 nautilus-open-terminal 0.11
 ===========================
-[ NOT YET RELEASED ]
+"Hullabaloo"
+
+	* Dedicated to Muse, the best live band ever.
+
+	Fixes / Build
+
+	* Do not depend on eel anymore, because it is linked statically into Nautilus. Instead, import the required
+	eel terminal launch helpers.
+	* Explicitly depend on gconf.
 
 nautilus-open-terminal 0.10
 ===========================
diff --git a/TODO b/TODO
index 2e6f16d..8fbddee 100644
--- a/TODO
+++ b/TODO
@@ -1,7 +1,7 @@
 General
 =======
-- Proper Error Handling
-- Fix Supposed Memleaks
-- Squash Out Possible Bugs
-- Clean Up Code
+- Get Proper Startup Notification. Currently, imported libeel helpers
+  are used to launch the terminal. The GAppInfo created with
+  g_desktop_app_info_new() which could be used for launching the GNOME Terminal
+  can not handle any extra argvs.
 - Figure Out Remote SFTP Filename Encoding (Possible At All?)
diff --git a/configure.in b/configure.in
index 594e20b..f06ca39 100644
--- a/configure.in
+++ b/configure.in
@@ -37,7 +37,7 @@ PKG_CHECK_MODULES(NAUTILUS, [
 	libnautilus-extension >= $NAUTILUS_REQUIRED
 	glib-2.0 >= $GLIB_REQUIRED
 	gio-2.0,
-	eel-2.0
+	gconf-2.0
 ])
 PKG_CHECK_MODULES(GCONF, gconf-2.0)
 PKG_CHECK_MODULES(GNOMEDESKTOP, gnome-desktop-2.0 >= $LIBGNOME_DESKTOP_REQUIRED)
diff --git a/src/Makefile.am b/src/Makefile.am
index f25795a..2255d7e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -17,6 +17,9 @@ nautilus_extensiondir=$(NAUTILUS_EXTENSION_DIR)
 nautilus_extension_LTLIBRARIES=libnautilus-open-terminal.la
 
 libnautilus_open_terminal_la_SOURCES = \
+	eel-gnome-extensions.c       \
+	eel-gnome-extensions.h       \
+	nautilus-open-terminal.h       \
 	nautilus-open-terminal.c       \
 	nautilus-open-terminal.h       \
 	open-terminal.c
diff --git a/src/eel-gnome-extensions.c b/src/eel-gnome-extensions.c
new file mode 100644
index 0000000..a6db181
--- /dev/null
+++ b/src/eel-gnome-extensions.c
@@ -0,0 +1,196 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* eel-gnome-extensions.c - implementation of new functions that operate on
+                            gnome classes. Perhaps some of these should be
+  			    rolled into gnome someday.
+
+   Copyright (C) 1999, 2000, 2001 Eazel, Inc.
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: Darin Adler <darin eazel com>
+*/
+
+#include <config.h>
+
+#define GNOME_DESKTOP_USE_UNSTABLE_API
+
+#include <X11/Xatom.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include <libgnome/gnome-desktop-utils.h>
+#include <limits.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+/* Return a command string containing the path to a terminal on this system. */
+
+static char *
+try_terminal_command (const char *program,
+		      const char *args)
+{
+	char *program_in_path, *quoted, *result;
+
+	if (program == NULL) {
+		return NULL;
+	}
+
+	program_in_path = g_find_program_in_path (program);
+	if (program_in_path == NULL) {
+		return NULL;
+	}
+
+	quoted = g_shell_quote (program_in_path);
+	if (args == NULL || args[0] == '\0') {
+		return quoted;
+	}
+	result = g_strconcat (quoted, " ", args, NULL);
+	g_free (quoted);
+	return result;
+}
+
+static char *
+try_terminal_command_argv (int argc,
+			   char **argv)
+{
+	GString *string;
+	int i;
+	char *quoted, *result;
+
+	if (argc == 0) {
+		return NULL;
+	}
+
+	if (argc == 1) {
+		return try_terminal_command (argv[0], NULL);
+	}
+	
+	string = g_string_new (argv[1]);
+	for (i = 2; i < argc; i++) {
+		quoted = g_shell_quote (argv[i]);
+		g_string_append_c (string, ' ');
+		g_string_append (string, quoted);
+		g_free (quoted);
+	}
+	result = try_terminal_command (argv[0], string->str);
+	g_string_free (string, TRUE);
+
+	return result;
+}
+
+static char *
+get_terminal_command_prefix (gboolean for_command)
+{
+	int argc;
+	char **argv;
+	char *command;
+	guint i;
+	static const char *const commands[][3] = {
+		{ "gnome-terminal", "-x",                                      "" },
+		{ "dtterm",         "-e",                                      "-ls" },
+		{ "nxterm",         "-e",                                      "-ls" },
+		{ "color-xterm",    "-e",                                      "-ls" },
+		{ "rxvt",           "-e",                                      "-ls" },
+		{ "xterm",          "-e",                                      "-ls" },
+	};
+
+	/* Try the terminal from preferences. Use without any
+	 * arguments if we are just doing a standalone terminal.
+	 */
+	argc = 0;
+	argv = g_new0 (char *, 1);
+	gnome_desktop_prepend_terminal_to_vector (&argc, &argv);
+
+	command = NULL;
+	if (argc != 0) {
+		if (for_command) {
+			command = try_terminal_command_argv (argc, argv);
+		} else {
+			/* Strip off the arguments in a lame attempt
+			 * to make it be an interactive shell.
+			 */
+			command = try_terminal_command (argv[0], NULL);
+		}
+	}
+
+	while (argc != 0) {
+		g_free (argv[--argc]);
+	}
+	g_free (argv);
+
+	if (command != NULL) {
+		return command;
+	}
+
+	/* Try well-known terminal applications in same order that gmc did. */
+	for (i = 0; i < G_N_ELEMENTS (commands); i++) {
+		command = try_terminal_command (commands[i][0],
+						commands[i][for_command ? 1 : 2]);
+		if (command != NULL) {
+			break;
+		}
+	}
+	
+	return command;
+}
+
+char *
+_not_eel_gnome_make_terminal_command (const char *command)
+{
+	char *prefix, *quoted, *terminal_command;
+
+	if (command == NULL) {
+		return get_terminal_command_prefix (FALSE);
+	}
+	prefix = get_terminal_command_prefix (TRUE);
+	quoted = g_shell_quote (command);
+	terminal_command = g_strconcat (prefix, " /bin/sh -c ", quoted, NULL);
+	g_free (prefix);
+	g_free (quoted);
+	return terminal_command;
+}
+
+void
+_not_eel_gnome_open_terminal_on_screen (const char *command,
+					GdkScreen  *screen)
+{
+	char *command_line;
+
+	if (screen == NULL) {
+		screen = gdk_screen_get_default ();
+	}
+	
+	command_line = _not_eel_gnome_make_terminal_command (command);
+	if (command_line == NULL) {
+		g_message ("Could not start a terminal");
+		return;
+	}
+	gdk_spawn_command_line_on_screen (screen, command_line, NULL);
+	g_free (command_line);
+}
+
+void
+_not_eel_gnome_open_terminal (const char *command)
+{
+	eel_gnome_open_terminal_on_screen (command, NULL);
+}
diff --git a/src/eel-gnome-extensions.h b/src/eel-gnome-extensions.h
new file mode 100644
index 0000000..aea54f0
--- /dev/null
+++ b/src/eel-gnome-extensions.h
@@ -0,0 +1,44 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+
+/* eel-gnome-extensions.h - interface for new functions that operate on
+                                 gnome classes. Perhaps some of these should be
+  			         rolled into gnome someday.
+
+   Copyright (C) 1999, 2000, 2001 Eazel, Inc.
+
+   The Gnome Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The Gnome Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the Gnome Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.
+
+   Authors: Darin Adler <darin eazel com>
+*/
+
+#ifndef EEL_GNOME_EXTENSIONS_H
+#define EEL_GNOME_EXTENSIONS_H
+
+#include <gtk/gtk.h>
+
+/* icon selection callback function. */
+typedef void (* EelIconSelectionFunction) (const char *icon_path, gpointer callback_data);
+
+
+/* Return a command string containing the path to a terminal on this system. */
+char *        eel_gnome_make_terminal_command                         (const char               *command);
+
+/* Open up a new terminal, optionally passing in a command to execute */
+void          eel_gnome_open_terminal                                 (const char               *command);
+void          eel_gnome_open_terminal_on_screen                       (const char               *command,
+								       GdkScreen                *screen);
+								 
+#endif /* EEL_GNOME_EXTENSIONS_H */
diff --git a/src/nautilus-open-terminal.c b/src/nautilus-open-terminal.c
index e259f82..d4ba864 100644
--- a/src/nautilus-open-terminal.c
+++ b/src/nautilus-open-terminal.c
@@ -26,6 +26,7 @@
 #endif
 
 #include "nautilus-open-terminal.h"
+#include "eel-gnome-extensions.h"
 
 #include <libnautilus-extension/nautilus-menu-provider.h>
 
@@ -33,9 +34,9 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 #include <gconf/gconf.h>
+#include <gconf/gconf-client.h>
 #include <libgnome/gnome-desktop-item.h>
 #include <libgnomevfs/gnome-vfs.h>
-#include <eel/eel.h>
 
 #include <errno.h>
 #include <fcntl.h>
@@ -252,7 +253,7 @@ open_terminal (NautilusMenuItem *item,
 
 	terminal_command = get_terminal_command_for_file_info (file_info, command_to_run, remote_terminal);
 	if (terminal_command != NULL) {
-		eel_gnome_open_terminal_on_screen (terminal_command, screen);
+		_not_eel_gnome_open_terminal_on_screen (terminal_command, screen);
 	}
 	g_free (terminal_command);
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]