kov changed gksu/trunk/ChangeLog, gksu/trunk/Makefile.am, gksu/trunk/aclocal.m4, gksu/trunk/config.h.in, gksu/trunk/configure.ac, gksu/trunk/nautilus-gksu/, gksu/trunk/nautilus-gksu/Makefile.am, gksu/trunk/nautilus-gksu/libnautilus-gksu.c, gksu/trunk/po/POTFILES.in

Gustavo Noronha kov at costa.debian.org
Sun Jul 9 22:52:12 UTC 2006


Mensagem de log: 
add the initial implementation of the nautilus module


-----


Modified: gksu/trunk/ChangeLog
===================================================================
--- gksu/trunk/ChangeLog	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/ChangeLog	2006-07-09 22:52:06 UTC (rev 643)
@@ -1,3 +1,9 @@
+2006-07-09  Gustavo Noronha Silva  <kov at debian.org>
+
+	* nautilus-gksu:
+	- wrote an initial nautilus module to provide a 'open as administrator'
+	  menu item for stuff in nautilus
+
 2006-07-03  Gustavo Noronha Silva  <kov at debian.org>
 
 	* gksu/gksu.c:

Modified: gksu/trunk/Makefile.am
===================================================================
--- gksu/trunk/Makefile.am	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/Makefile.am	2006-07-09 22:52:06 UTC (rev 643)
@@ -1,6 +1,12 @@
 DISTCLEANFILES = *~
 
-SUBDIRS = po man gksu
+if ENABLE_NAUTILUS_EXTENSION
+NAUTILUS_EXTENSION_DIR = nautilus-gksu
+else
+NAUTILUS_EXTENSION_DIR =
+endif
+
+SUBDIRS = po man gksu $(NAUTILUS_EXTENSION_DIR)
 DIST_SUBDIRS = $(SUBDIRS)
 
 icondir = $(datadir)/pixmaps

Modified: gksu/trunk/aclocal.m4
===================================================================
--- gksu/trunk/aclocal.m4	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/aclocal.m4	2006-07-09 22:52:06 UTC (rev 643)
@@ -452,7 +452,7 @@
 
 
 dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml])
-# serial 2 IT_PROG_INTLTOOL
+# serial 35 IT_PROG_INTLTOOL
 AC_DEFUN([IT_PROG_INTLTOOL],
 [AC_PREREQ([2.50])dnl
 
@@ -467,9 +467,9 @@
 if test -n "$1"; then
     AC_MSG_CHECKING(for intltool >= $1)
 
-    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 100 + $ 2; }'`
+    INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'`
     INTLTOOL_APPLIED_VERSION=`awk -F\" '/\\$VERSION / { print $ 2; }' ${ac_aux_dir}/intltool-update.in`
-    [INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($ 2, VERSION, "."); print VERSION[1] * 100 + VERSION[2];}' ${ac_aux_dir}/intltool-update.in`
+    [INTLTOOL_APPLIED_VERSION_AS_INT=`awk -F\" '/\\$VERSION / { split($ 2, VERSION, "."); print VERSION[1] * 1000 + VERSION[2] * 100 + VERSION[3];}' ${ac_aux_dir}/intltool-update.in`
     ]
     AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found])
     test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" ||
@@ -540,6 +540,9 @@
 AC_PATH_PROG(INTLTOOL_MSGMERGE, msgmerge, msgmerge)
 AC_PATH_PROG(INTLTOOL_XGETTEXT, xgettext, xgettext)
 
+# Substitute ALL_LINGUAS so we can use it in po/Makefile
+AC_SUBST(ALL_LINGUAS)
+    
 IT_PO_SUBDIR([po])
 
 dnl The following is very similar to

Modified: gksu/trunk/config.h.in
===================================================================
--- gksu/trunk/config.h.in	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/config.h.in	2006-07-09 22:52:06 UTC (rev 643)
@@ -3,6 +3,9 @@
 /* always defined to indicate that i18n is enabled */
 #undef ENABLE_NLS
 
+/* gettext domain */
+#undef GETTEXT_PACKAGE
+
 /* Define to 1 if you have the `bind_textdomain_codeset' function. */
 #undef HAVE_BIND_TEXTDOMAIN_CODESET
 

Modified: gksu/trunk/configure.ac
===================================================================
--- gksu/trunk/configure.ac	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/configure.ac	2006-07-09 22:52:06 UTC (rev 643)
@@ -12,7 +12,7 @@
 
 AC_DEFINE(PACKAGE, AC_PACKAGE_NAME, [package name])
 AC_DEFINE(VERSION, AC_PACKAGE_VERSION, [package version])
-GETTEXT_PACKAGE=AC_PACKAGE_NAME
+AC_DEFINE([GETTEXT_PACKAGE], ["gksu"], [gettext domain])
 AC_SUBST(GETTEXT_PACKAGE)
 
 # Checks for programs.
@@ -61,10 +61,18 @@
 AM_CONDITIONAL(GTK_DOC_USE_LIBTOOL, test x$use_libtool = xyes)
 # end of gtk-doc check
 
+AC_ARG_ENABLE(nautilus-extension, [  --enable-nautilus-extension  Build the nautilus extensions module [default=yes]], enable_nautilus_extension="$enableval", enable_nautilus_extension=yes)
+AM_CONDITIONAL(ENABLE_NAUTILUS_EXTENSION, test x$enable_nautilus_extension = xyes)
+
+if test x$enable_nautilus_extension = xyes; then
+   PKG_CHECK_MODULES(NAUTILUS, [libgksu2 >= 1.9.2, libnautilus-extension])
+fi
+
 AC_CONFIG_FILES([
 	Makefile
 	po/Makefile.in
 	man/Makefile
 	gksu/Makefile
+	nautilus-gksu/Makefile
 	])
 AC_OUTPUT

Added: gksu/trunk/nautilus-gksu/Makefile.am
===================================================================
--- gksu/trunk/nautilus-gksu/Makefile.am	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/nautilus-gksu/Makefile.am	2006-07-09 22:52:06 UTC (rev 643)
@@ -0,0 +1,9 @@
+AM_CFLAGS = -g -O2 -Wall
+INCLUDES = ${NAUTILUS_CFLAGS}
+AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" -DDATA_DIR=\"$(datadir)\" -DPREFIX=\"$(prefix)\"
+
+nautilus_extensiondir=$(libdir)/nautilus/extensions-1.0
+nautilus_extension_LTLIBRARIES = libnautilus-gksu.la
+libnautilus_gksu_la_SOURCES = libnautilus-gksu.c
+libnautilus_gksu_la_LDFLAGS = LDFLAGS = -module -avoid-version -no-undefined
+libnautilus_gksu_la_LIBADD  = $(NAUTILUS_LIBS)

Added: gksu/trunk/nautilus-gksu/libnautilus-gksu.c
===================================================================
--- gksu/trunk/nautilus-gksu/libnautilus-gksu.c	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/nautilus-gksu/libnautilus-gksu.c	2006-07-09 22:52:06 UTC (rev 643)
@@ -0,0 +1,210 @@
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <gtk/gtk.h>
+#include <libgnomevfs/gnome-vfs-mime-handlers.h>
+#include <libnautilus-extension/nautilus-extension-types.h>
+#include <libnautilus-extension/nautilus-menu-provider.h>
+
+#include "../config.h"
+
+#include <libintl.h>
+#define _(x) dgettext (GETTEXT_PACKAGE, x)
+
+#define GKSU_TYPE_CONTEXT_MENU (gksu_context_menu_get_type ())
+#define GKSU_CONTEXT_MENU(o)   (G_TYPE_CHECK_INSTANCE_CAST ((o), GKSU_TYPE_CONTEXT_MENU))
+
+typedef struct {
+    GObject parent;
+} GksuContextMenu;
+
+typedef struct {
+    GObjectClass parent_class;
+} GksuContextMenuClass;
+
+static GType gksucm_type = 0;
+static GObjectClass *parent_class = NULL;
+
+static void
+gksu_context_menu_init (GksuContextMenu *self);
+static void
+gksu_context_menu_class_init (GksuContextMenuClass *class);
+static void
+menu_provider_iface_init (NautilusMenuProviderIface *iface);
+
+static GList*
+gksu_context_menu_get_file_items (NautilusMenuProvider *provider,
+				  GtkWidget *window,
+				  GList *files);
+static void
+gksu_context_menu_activate (NautilusMenuItem *item,
+			    NautilusFileInfo *file);
+
+static GType
+gksu_context_menu_get_type (void)
+{
+    return gksucm_type;
+}
+
+static void
+gksu_context_menu_register_type (GTypeModule *module)
+{
+    static const GTypeInfo info = {
+	sizeof (GksuContextMenuClass),
+	(GBaseInitFunc) NULL,
+	(GBaseFinalizeFunc) NULL,
+	(GClassInitFunc) gksu_context_menu_class_init,
+	NULL,
+	NULL,
+	sizeof (GksuContextMenu),
+	0,
+	(GInstanceInitFunc) gksu_context_menu_init
+    };
+    static const GInterfaceInfo menu_provider_iface_info = {
+	(GInterfaceInitFunc)menu_provider_iface_init,
+	NULL,
+	NULL
+    };
+
+    gksucm_type = g_type_module_register_type (module,
+					    G_TYPE_OBJECT,
+					    "GksuContextMenu",
+					    &info, 0);
+    g_type_module_add_interface (module,
+				 gksucm_type,
+				 NAUTILUS_TYPE_MENU_PROVIDER,
+				 &menu_provider_iface_info);
+}
+
+static void
+gksu_context_menu_class_init (GksuContextMenuClass *class)
+{
+    parent_class = g_type_class_peek_parent (class);
+}
+
+static void menu_provider_iface_init (NautilusMenuProviderIface *iface)
+{
+    iface->get_file_items = gksu_context_menu_get_file_items;
+}
+
+static void
+gksu_context_menu_init (GksuContextMenu *self)
+{
+}
+
+static GList *
+gksu_context_menu_get_file_items (NautilusMenuProvider *provider,
+				  GtkWidget *window,
+				  GList *files)
+{
+    GList *items = NULL;
+    NautilusFileInfo *file;
+    NautilusMenuItem *item;
+
+    /* only add a menu item if a single file is selected */
+    if (files == NULL || files->next != NULL)
+      return NULL;
+
+    file = files->data;
+
+    if (nautilus_file_info_is_directory (file))
+      return NULL;
+
+    /* create the context menu item */
+    item = nautilus_menu_item_new ("Gksu::open_as_root",
+				   _("Open as administrator"),
+				   _("Opens the file with administrator privileges"),
+				   NULL);
+    g_signal_connect_object (item, "activate",
+			     G_CALLBACK (gksu_context_menu_activate),
+			     file, 0);
+    items = g_list_prepend (items, item);
+
+    return items;
+}
+
+static void*
+start_gksu_thread (void *data)
+{
+  GPid pid;
+  gchar **argv = (gchar**) g_malloc (sizeof (gchar*) * 3);
+  gchar *full_cmd = (gchar*) data;
+
+  argv[0] = g_strdup ("gksu");
+  argv[1] = full_cmd;
+  argv[2] = NULL;
+
+  g_printerr ("sgt: full_cmd: %s\n", full_cmd);
+  g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL,
+		 &pid, NULL);
+
+  g_free (argv[0]);
+  g_free (full_cmd);
+  g_free (argv);
+
+  return NULL;
+}
+
+static void
+gksu_context_menu_activate (NautilusMenuItem *item,
+			    NautilusFileInfo *file)
+{
+  GnomeVFSMimeApplication *vfsapp = NULL;
+  gchar *uri = NULL;
+  gchar *mime_type = NULL;
+  gchar *cmd = NULL;
+  gchar *full_cmd = NULL;
+  gchar *tmp = NULL;
+
+  uri = nautilus_file_info_get_uri (file);
+  mime_type = nautilus_file_info_get_mime_type (file);
+
+  vfsapp = gnome_vfs_mime_get_default_application_for_uri (uri, mime_type);
+  g_free (mime_type);
+
+  cmd = g_strdup (gnome_vfs_mime_application_get_exec (vfsapp));
+
+  /*
+   * FIXME: remove any FreeDesktop substitution variable for now; we
+   * need to process them!
+   */
+  tmp = strstr (cmd, "%");
+  *tmp = '\0';
+
+  full_cmd = g_strdup_printf ("%s '%s'", cmd, uri);
+  g_printerr ("full_cmd: %s\n", full_cmd);
+
+  {
+    pthread_t new_thread;
+    pthread_create (&new_thread, NULL, start_gksu_thread, (void*)full_cmd);
+  }
+
+  gnome_vfs_mime_application_free (vfsapp);
+  g_free (uri);
+}
+
+/* --- extension interface --- */
+void
+nautilus_module_initialize (GTypeModule *module)
+{
+    gksu_context_menu_register_type (module);
+}
+
+void
+nautilus_module_shutdown (void)
+{
+}
+
+void
+nautilus_module_list_types (const GType **types,
+			    int *num_types)
+{
+    static GType type_list[1];
+
+    type_list[0] = GKSU_TYPE_CONTEXT_MENU;
+    *types = type_list;
+    *num_types = G_N_ELEMENTS (type_list);
+}

Modified: gksu/trunk/po/POTFILES.in
===================================================================
--- gksu/trunk/po/POTFILES.in	2006-07-08 01:05:25 UTC (rev 642)
+++ gksu/trunk/po/POTFILES.in	2006-07-09 22:52:06 UTC (rev 643)
@@ -1,2 +1,3 @@
 gksu/gksu.c
 gksu.desktop.in
+nautilus-gksu/libnautilus-gksu.c




More information about the gksu-commits mailing list