r13482 - in /desktop/unstable/eel2/debian: changelog control control.in patches/01_libtool_release.patch patches/02_ldflags_libadd.patch patches/10_open-with_install.patch patches/series

joss at users.alioth.debian.org joss at users.alioth.debian.org
Sun Nov 18 16:35:39 UTC 2007


Author: joss
Date: Sun Nov 18 16:35:38 2007
New Revision: 13482

URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=13482
Log:
* Refresh patches.
* 10_open-with_install.patch: provide a list of applications able to 
  handle the current MIME type in the "Open with" dialog, and run 
  synaptic to install them.
* Recommend app-install-data and synaptic.

Added:
    desktop/unstable/eel2/debian/patches/10_open-with_install.patch
Modified:
    desktop/unstable/eel2/debian/changelog
    desktop/unstable/eel2/debian/control
    desktop/unstable/eel2/debian/control.in
    desktop/unstable/eel2/debian/patches/01_libtool_release.patch
    desktop/unstable/eel2/debian/patches/02_ldflags_libadd.patch
    desktop/unstable/eel2/debian/patches/series

Modified: desktop/unstable/eel2/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/changelog?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/changelog (original)
+++ desktop/unstable/eel2/debian/changelog Sun Nov 18 16:35:38 2007
@@ -1,3 +1,13 @@
+eel2 (2.20.0-3) UNRELEASED; urgency=low
+
+  * Refresh patches.
+  * 10_open-with_install.patch: provide a list of applications able to 
+    handle the current MIME type in the "Open with" dialog, and run 
+    synaptic to install them.
+  * Recommend app-install-data and synaptic.
+
+ -- Josselin Mouette <joss at debian.org>  Sun, 18 Nov 2007 17:34:40 +0100
+
 eel2 (2.20.0-2) unstable; urgency=low
 
   * Upload to unstable, drop check-dist include.

Modified: desktop/unstable/eel2/debian/control
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/control?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/control (original)
+++ desktop/unstable/eel2/debian/control Sun Nov 18 16:35:38 2007
@@ -58,6 +58,7 @@
 Depends: ${misc:Depends},
          ${shlibs:Depends},
          libeel2-data
+Recommends: synaptic, app-install-data
 Description: Eazel Extensions Library (for GNOME2)
  The Eazel Extensions Library is a collection of widgets and extensions
  to many modules of the GNOME platform.  These widgets and extensions 

Modified: desktop/unstable/eel2/debian/control.in
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/control.in?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/control.in (original)
+++ desktop/unstable/eel2/debian/control.in Sun Nov 18 16:35:38 2007
@@ -58,6 +58,7 @@
 Depends: ${misc:Depends},
          ${shlibs:Depends},
          libeel2-data
+Recommends: synaptic, app-install-data
 Description: Eazel Extensions Library (for GNOME2)
  The Eazel Extensions Library is a collection of widgets and extensions
  to many modules of the GNOME platform.  These widgets and extensions 

Modified: desktop/unstable/eel2/debian/patches/01_libtool_release.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/patches/01_libtool_release.patch?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/patches/01_libtool_release.patch (original)
+++ desktop/unstable/eel2/debian/patches/01_libtool_release.patch Sun Nov 18 16:35:38 2007
@@ -1,8 +1,8 @@
-Index: eel-2.18.3/eel/Makefile.am
+Index: eel-2.20.0/eel/Makefile.am
 ===================================================================
---- eel-2.18.3.orig/eel/Makefile.am	2007-07-02 22:39:31.000000000 +0200
-+++ eel-2.18.3/eel/Makefile.am	2007-07-19 00:02:26.964652549 +0200
-@@ -24,7 +24,7 @@
+--- eel-2.20.0.orig/eel/Makefile.am	2007-04-03 12:06:05.000000000 +0200
++++ eel-2.20.0/eel/Makefile.am	2007-11-17 11:48:56.528155681 +0100
+@@ -24,7 +24,7 @@ INCLUDES =						\
  
  
  libeel_2_la_LDFLAGS =				\
@@ -11,11 +11,11 @@
  	-no-undefined				\
  	$(EEL_LIBS)				\
  	$(RENDER_LIBS)				\
-Index: eel-2.18.3/eel/Makefile.in
+Index: eel-2.20.0/eel/Makefile.in
 ===================================================================
---- eel-2.18.3.orig/eel/Makefile.in	2007-07-02 23:16:41.000000000 +0200
-+++ eel-2.18.3/eel/Makefile.in	2007-07-19 00:02:26.964652549 +0200
-@@ -311,7 +311,7 @@
+--- eel-2.20.0.orig/eel/Makefile.in	2007-09-18 08:45:54.000000000 +0200
++++ eel-2.20.0/eel/Makefile.in	2007-11-17 11:48:56.516154998 +0100
+@@ -308,7 +308,7 @@ INCLUDES = \
  # FIXME: put this back once the registration_id stuff is cleared up
  #	-DBONOBO_DISABLE_DEPRECATED
  libeel_2_la_LDFLAGS = \

Modified: desktop/unstable/eel2/debian/patches/02_ldflags_libadd.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/patches/02_ldflags_libadd.patch?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/patches/02_ldflags_libadd.patch (original)
+++ desktop/unstable/eel2/debian/patches/02_ldflags_libadd.patch Sun Nov 18 16:35:38 2007
@@ -1,8 +1,8 @@
-Index: eel-2.18.3/eel/Makefile.am
+Index: eel-2.20.0/eel/Makefile.am
 ===================================================================
---- eel-2.18.3.orig/eel/Makefile.am	2007-07-19 00:04:55.805134485 +0200
-+++ eel-2.18.3/eel/Makefile.am	2007-07-19 00:03:22.935842165 +0200
-@@ -26,6 +26,9 @@
+--- eel-2.20.0.orig/eel/Makefile.am	2007-11-17 11:48:56.528155681 +0100
++++ eel-2.20.0/eel/Makefile.am	2007-11-17 11:49:01.580443595 +0100
+@@ -26,6 +26,9 @@ INCLUDES =						\
  libeel_2_la_LDFLAGS =				\
  	-release @EEL_MAJOR_VERSION at .@EEL_MINOR_VERSION@	\
  	-no-undefined				\
@@ -12,11 +12,11 @@
  	$(EEL_LIBS)				\
  	$(RENDER_LIBS)				\
  	$(X_LIBS)				\
-Index: eel-2.18.3/eel/Makefile.in
+Index: eel-2.20.0/eel/Makefile.in
 ===================================================================
---- eel-2.18.3.orig/eel/Makefile.in	2007-07-19 00:04:55.805134485 +0200
-+++ eel-2.18.3/eel/Makefile.in	2007-07-19 00:03:30.420268678 +0200
-@@ -55,7 +55,9 @@
+--- eel-2.20.0.orig/eel/Makefile.in	2007-11-17 11:48:56.516154998 +0100
++++ eel-2.20.0/eel/Makefile.in	2007-11-17 11:49:01.580443595 +0100
+@@ -55,7 +55,9 @@ am__installdirs = "$(DESTDIR)$(libdir)" 
  	"$(DESTDIR)$(libeelincludedir)"
  libLTLIBRARIES_INSTALL = $(INSTALL)
  LTLIBRARIES = $(lib_LTLIBRARIES)
@@ -27,7 +27,7 @@
  am__objects_1 =
  am_libeel_2_la_OBJECTS = eel-accessibility.lo eel-alert-dialog.lo \
  	eel-art-extensions.lo eel-art-gtk-extensions.lo \
-@@ -82,7 +84,6 @@
+@@ -82,7 +84,6 @@ libeel_2_la_LINK = $(LIBTOOL) --tag=CC $
  PROGRAMS = $(noinst_PROGRAMS)
  am_check_program_OBJECTS = check-program.$(OBJEXT)
  check_program_OBJECTS = $(am_check_program_OBJECTS)
@@ -35,7 +35,7 @@
  check_program_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
  	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
  	$(check_program_LDFLAGS) $(LDFLAGS) -o $@
-@@ -313,6 +314,9 @@
+@@ -310,6 +311,9 @@ INCLUDES = \
  libeel_2_la_LDFLAGS = \
  	-release @EEL_MAJOR_VERSION at .@EEL_MINOR_VERSION@	\
  	-no-undefined				\

Added: desktop/unstable/eel2/debian/patches/10_open-with_install.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/patches/10_open-with_install.patch?rev=13482&op=file
==============================================================================
--- desktop/unstable/eel2/debian/patches/10_open-with_install.patch (added)
+++ desktop/unstable/eel2/debian/patches/10_open-with_install.patch Sun Nov 18 16:35:38 2007
@@ -1,0 +1,631 @@
+Index: eel-2.20.0/eel/eel-open-with-dialog.c
+===================================================================
+--- eel-2.20.0.orig/eel/eel-open-with-dialog.c	2007-08-21 15:16:49.000000000 +0200
++++ eel-2.20.0/eel/eel-open-with-dialog.c	2007-11-18 17:32:57.950024703 +0100
+@@ -30,6 +30,7 @@
+ #include "eel-stock-dialogs.h"
+ 
+ #include <string.h>
++#include <unistd.h>
+ #include <glib/gi18n-lib.h>
+ #include <gtk/gtkalignment.h>
+ #include <gtk/gtkbox.h>
+@@ -42,6 +43,7 @@
+ #include <gtk/gtkicontheme.h>
+ #include <gtk/gtkiconfactory.h>
+ #include <gtk/gtklabel.h>
++#include <gtk/gtknotebook.h>
+ #include <gtk/gtkscrolledwindow.h>
+ #include <gtk/gtkstock.h>
+ #include <gtk/gtktreeview.h>
+@@ -57,6 +59,14 @@
+ #define sure_string(s)                    ((const char *)((s)!=NULL?(s):""))
+ #define DESKTOP_ENTRY_GROUP		  "Desktop Entry"
+ 
++#define APP_DESKTOP_DIR   "/usr/share/app-install/desktop"
++#define APP_INSTALLED_DIR "/usr/share/applications"
++#define APP_ICON_DIR      "/usr/share/app-install/icons"
++#define PACKAGE_FIELD     "X-AppInstall-Package"
++#define GKSU_PATH         "/usr/bin/gksu"
++#define SYNAPTIC_PATH     "/usr/sbin/synaptic"
++#define SYNAPTIC_DESKTOP  APP_INSTALLED_DIR "/synaptic.desktop"
++
+ struct _EelOpenWithDialogDetails {
+ 	char *uri;
+ 
+@@ -67,11 +77,14 @@ struct _EelOpenWithDialogDetails {
+ 	char *new_glob;
+ 	char *desktop_file;
+ 
++	GtkWidget *notebook;
++
+ 	GtkWidget *label;
+ 	GtkWidget *entry;
+ 	GtkWidget *button;
+ 
+ 	GtkWidget *desc_label;
++	GtkWidget *desc_label2;
+ 
+ 	GtkWidget *open_label;
+ 
+@@ -80,6 +93,11 @@ struct _EelOpenWithDialogDetails {
+ 	GSList	      *add_icon_paths;
+ 	gint	       add_items_idle_id;
+ 	gint	       add_icons_idle_id;
++	
++	GtkWidget     *avail_program_list;
++	GtkListStore  *avail_program_list_store;
++	GSList	      *add_icon_avail_paths;
++	gint	       add_avail_items_idle_id;
+ };
+ 
+ enum {
+@@ -92,6 +110,8 @@ enum {
+         NUM_COLUMNS
+ };
+ 
++#define COLUMN_PACKAGE COLUMN_EXEC
++
+ enum {
+ 	RESPONSE_OPEN
+ };
+@@ -119,6 +139,10 @@ eel_open_with_dialog_finalize (GObject *
+ 		g_source_remove (dialog->details->add_items_idle_id);
+ 	}
+ 	
++	if (dialog->details->add_items_idle_id) {
++		g_source_remove (dialog->details->add_avail_items_idle_id);
++	}
++	
+ 	g_free (dialog->details->uri);
+ 	g_free (dialog->details->mime_type);
+ 	g_free (dialog->details->mime_description);
+@@ -129,6 +153,15 @@ eel_open_with_dialog_finalize (GObject *
+ 	G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+ 
++static gint
++get_current_page (EelOpenWithDialog *dialog)
++{
++	if (dialog->details->notebook == NULL)
++		return 0;
++	else
++		return gtk_notebook_get_current_page (GTK_NOTEBOOK (dialog->details->notebook));
++}
++
+ static void
+ eel_open_with_dialog_destroy (GtkObject *object)
+ {
+@@ -293,6 +326,56 @@ add_or_find_application (EelOpenWithDial
+ }
+ 
+ static void
++synaptic_died_cb (GPid pid, gint status, gchar *filename)
++{
++	unlink (filename);
++	g_free (filename);
++}
++
++static void
++install_application (EelOpenWithDialog *dialog)
++{
++	GtkTreeSelection *selection;
++	GtkTreeModel     *model;
++	GtkTreeIter       iter;
++	gchar            *package;
++	gchar            *temp;
++	gchar            *filename;
++	GPid              pid;
++	gint              fd;
++	gchar            *args [] = { GKSU_PATH, "--desktop", SYNAPTIC_DESKTOP,
++				      "--", SYNAPTIC_PATH, "--hide-main-window",
++				      "--non-interactive", "-o", "Synaptic::closeZvt=true",
++				      "--set-selections-file", NULL, NULL };
++
++	g_return_if_fail (dialog->details->avail_program_list != NULL);
++	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->details->avail_program_list));
++	if (!gtk_tree_selection_get_selected (selection, &model, &iter))
++		return;
++	gtk_tree_model_get (model, &iter, COLUMN_PACKAGE, &package, -1);
++	if (!package)
++		return;
++
++	fd = g_file_open_tmp ("eel_synaptic_XXXXXX", &filename, NULL);
++	if (!fd) {
++		g_free (package);
++		return;
++	}
++	temp = g_strconcat (package, "\tinstall\n", NULL);
++	g_free (package);
++	write (fd, temp, strlen(temp));
++	close (fd);
++	g_free (temp);
++	args[10] = filename;
++	if (g_spawn_async (NULL, args, NULL, G_SPAWN_DO_NOT_REAP_CHILD,
++			   NULL, NULL, &pid, NULL)) {
++		g_child_watch_add (pid, (GChildWatchFunc) synaptic_died_cb, filename);
++	} else {
++		synaptic_died_cb (0, 0, filename);
++	}
++}
++
++static void
+ emit_application_selected (EelOpenWithDialog *dialog,
+ 			   GnomeVFSMimeApplication *application)
+ {
+@@ -309,7 +392,10 @@ response_cb (EelOpenWithDialog *dialog,
+ 
+ 	switch (response_id) {
+ 	case RESPONSE_OPEN:
+-		if (check_application (dialog)) {
++		if (get_current_page (dialog)) {
++			install_application (dialog);
++			gtk_widget_destroy (GTK_WIDGET (dialog));
++		} else if (check_application (dialog)) {
+ 			application = add_or_find_application (dialog);
+ 
+ 			if (application) {
+@@ -444,28 +530,39 @@ eel_open_with_dialog_add_icon_idle (EelO
+ 	GdkPixbuf    *pixbuf;
+ 	char         *file;
+ 	gboolean      long_operation;
++	GtkListStore *store;
++	GSList      **paths;
++	gboolean      use_app_icons;
+ 
+ 	long_operation = FALSE;
+ 	do {
+-		if (!dialog->details->add_icon_paths) {
++		if (!dialog->details->add_icon_paths && !dialog->details->add_icon_avail_paths) {
+ 			dialog->details->add_icons_idle_id = 0;
+ 			return FALSE;
+ 		}
+ 
+-		path = dialog->details->add_icon_paths->data;
+-		dialog->details->add_icon_paths->data = NULL;
+-		dialog->details->add_icon_paths = g_slist_delete_link (dialog->details->add_icon_paths,
+-								       dialog->details->add_icon_paths);
++		if (dialog->details->add_icon_paths) {
++			paths = &(dialog->details->add_icon_paths);
++			store = dialog->details->program_list_store;
++			use_app_icons = FALSE;
++		} else {
++			paths = &(dialog->details->add_icon_avail_paths);
++			store = dialog->details->avail_program_list_store;
++			use_app_icons = TRUE;
++		}
++
++		path = (*paths)->data;
++		(*paths)->data = NULL;
++		*paths = g_slist_delete_link (*paths, *paths);
+ 
+-		if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (dialog->details->program_list_store),
+-					      &iter, path)) {
++		if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path)) {
+ 			gtk_tree_path_free (path);
+ 			continue;
+ 		}
+ 		
+ 		gtk_tree_path_free (path);
+ 
+-		gtk_tree_model_get (GTK_TREE_MODEL (dialog->details->program_list_store), &iter,
++		gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
+ 				    COLUMN_ICON_FILE, &file, -1);
+ 
+ 		if (file == NULL) {
+@@ -476,24 +573,47 @@ eel_open_with_dialog_add_icon_idle (EelO
+ 			pixbuf = gdk_pixbuf_new_from_file_at_size (file, 24, 24, NULL);
+ 			long_operation = TRUE;
+ 		} else {
+-			char *icon_no_extension;
+-			char *p;
+-
+-			icon_no_extension = g_strdup (file);
+-			p = strrchr (icon_no_extension, '.');
+-			if (p &&
+-			    (strcmp (p, ".png") == 0 ||
+-			     strcmp (p, ".xpm") == 0 ||
+-			     strcmp (p, ".svg") == 0)) {
+-				*p = 0;
++			pixbuf = NULL;
++			if (use_app_icons) {
++				char *fullpath = g_build_filename (APP_ICON_DIR, file, NULL);
++				if (!strrchr (file, '.')) {
++					int len = strlen (fullpath);
++					char *fullpath2 = g_strconcat (fullpath, ".svg", NULL);
++					g_free (fullpath);
++					fullpath = fullpath2;
++					if (!g_file_test (fullpath, G_FILE_TEST_EXISTS)) {
++						strcpy (fullpath + len, ".png");
++						if (!g_file_test (fullpath, G_FILE_TEST_EXISTS)) {
++							strcpy (fullpath + len, ".xpm");
++						}
++					}
++				}
++				if (g_file_test (fullpath, G_FILE_TEST_EXISTS)) {
++					pixbuf = gdk_pixbuf_new_from_file_at_size (fullpath, 24, 24, NULL);
++					long_operation = TRUE;
++				}
++				g_free (fullpath);
++			}
++			if (!pixbuf) {
++				char *icon_no_extension;
++				char *p;
++
++				icon_no_extension = g_strdup (file);
++				p = strrchr (icon_no_extension, '.');
++				if (p &&
++				    (strcmp (p, ".png") == 0 ||
++				     strcmp (p, ".xpm") == 0 ||
++				     strcmp (p, ".svg") == 0)) {
++					*p = 0;
++				}
++				pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
++								   icon_no_extension, 24, 0, NULL);
++				g_free (icon_no_extension);
++				long_operation = TRUE;
+ 			}
+-			pixbuf = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (),
+-							   icon_no_extension, 24, 0, NULL);
+-			g_free (icon_no_extension);
+-			long_operation = TRUE;
+ 		}
+ 		if (pixbuf) {
+-			gtk_list_store_set (dialog->details->program_list_store, &iter, COLUMN_ICON, pixbuf, -1);
++			gtk_list_store_set (store, &iter, COLUMN_ICON, pixbuf, -1);
+ 			g_object_unref (pixbuf);
+ 		}
+ 		g_free (file);
+@@ -661,7 +781,23 @@ eel_open_with_search_equal_func (GtkTree
+ 	}
+ }
+ 
+-
++static gint
++eel_open_with_sort_func (GtkTreeModel *model,
++			 GtkTreeIter *a,
++			 GtkTreeIter *b,
++			 gpointer data)
++{
++	gchar *name_a, *name_b;
++	gint retval;
++
++	gtk_tree_model_get (model, a, COLUMN_NAME, &name_a, -1);
++	gtk_tree_model_get (model, b, COLUMN_NAME, &name_b, -1);
++	retval = g_utf8_collate (name_a, name_b);
++	
++	g_free (name_a);
++	g_free (name_b);
++	return retval;
++}
+ 
+ static gboolean
+ eel_open_with_dialog_add_items_idle (EelOpenWithDialog *dialog)
+@@ -748,6 +884,121 @@ eel_open_with_dialog_add_items_idle (Eel
+ }
+ 
+ 
++static gboolean
++eel_open_with_dialog_add_avail_items_idle (EelOpenWithDialog *dialog)
++{
++	GDir *dir;
++	const gchar *filename;
++	GtkCellRenderer   *renderer;
++	GtkTreeViewColumn *column;
++
++	/* create list store */
++	dialog->details->avail_program_list_store = gtk_list_store_new (NUM_COLUMNS,
++									GDK_TYPE_PIXBUF,
++									G_TYPE_STRING,
++									G_TYPE_STRING,
++									G_TYPE_STRING,
++									G_TYPE_STRING,
++									G_TYPE_STRING);
++
++	dir = g_dir_open (APP_DESKTOP_DIR, 0, NULL);
++	g_assert (dir != NULL);
++	
++	while ((filename = g_dir_read_name (dir)) != NULL) {
++		gchar *absolute_name = g_build_filename (APP_DESKTOP_DIR, filename, NULL);
++		gchar *installed_name = g_build_filename (APP_INSTALLED_DIR, filename, NULL);
++		GKeyFile *key_file = g_key_file_new ();
++		gchar **mime_types;
++		if (!g_file_test (installed_name, G_FILE_TEST_EXISTS) &&
++		    g_key_file_load_from_file (key_file, absolute_name, G_KEY_FILE_NONE, NULL) &&
++		    (mime_types = g_key_file_get_string_list (key_file, G_KEY_FILE_DESKTOP_GROUP,
++							      G_KEY_FILE_DESKTOP_KEY_MIME_TYPE, NULL, NULL))) {
++			int i;
++			for (i = 0; mime_types[i]; i++) {
++				if (g_str_equal (mime_types[i], dialog->details->mime_type)) {
++					GtkTreeIter iter;
++					GtkTreePath *path;
++					gchar *icon_file = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
++										  G_KEY_FILE_DESKTOP_KEY_ICON, NULL);
++					gchar *name = g_key_file_get_locale_string (key_file,
++										    G_KEY_FILE_DESKTOP_GROUP,
++										    G_KEY_FILE_DESKTOP_KEY_NAME,
++										    NULL, NULL);
++					gchar *comment = g_key_file_get_locale_string (key_file,
++										       G_KEY_FILE_DESKTOP_GROUP,
++										       G_KEY_FILE_DESKTOP_KEY_COMMENT,
++										       NULL, NULL);
++					gchar *package = g_key_file_get_string (key_file, G_KEY_FILE_DESKTOP_GROUP,
++										PACKAGE_FIELD, NULL);
++
++					gtk_list_store_append (dialog->details->avail_program_list_store, &iter);
++					gtk_list_store_set (dialog->details->avail_program_list_store, &iter,
++							    COLUMN_ICON,	NULL,
++							    COLUMN_ICON_FILE,	icon_file,
++							    COLUMN_NAME,	name,
++							    COLUMN_COMMENT,	comment,
++							    COLUMN_PATH,	absolute_name,
++							    COLUMN_PACKAGE,	package,
++							   -1);
++					g_free (icon_file);
++					g_free (name);
++					g_free (comment);
++					g_free (package);
++
++					path = gtk_tree_model_get_path (GTK_TREE_MODEL (dialog->details->avail_program_list_store), &iter);
++					if (path != NULL) {
++						dialog->details->add_icon_avail_paths = g_slist_prepend (dialog->details->add_icon_avail_paths, path);
++					}
++
++					break;
++				}
++			}
++			g_strfreev (mime_types);
++		}
++		g_key_file_free (key_file);
++		g_free (absolute_name);
++		g_free (installed_name);
++	}
++	g_dir_close (dir);
++
++	gtk_tree_view_set_model (GTK_TREE_VIEW (dialog->details->avail_program_list), 
++				 GTK_TREE_MODEL (dialog->details->avail_program_list_store));
++	gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW (dialog->details->avail_program_list),
++					     eel_open_with_search_equal_func,
++					     NULL, NULL);
++	gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (dialog->details->avail_program_list_store), 0,
++					 eel_open_with_sort_func, NULL, NULL);
++	gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (dialog->details->avail_program_list_store), 0,
++					      GTK_SORT_ASCENDING);
++
++	renderer = gtk_cell_renderer_pixbuf_new ();
++	column = gtk_tree_view_column_new ();
++	gtk_tree_view_column_pack_start (column, renderer, FALSE);
++	gtk_tree_view_column_set_attributes (column, renderer,
++                                             "pixbuf", COLUMN_ICON,
++                                             NULL);
++        
++	renderer = gtk_cell_renderer_text_new ();
++	gtk_tree_view_column_pack_start (column, renderer, TRUE);
++	gtk_tree_view_column_set_attributes (column, renderer,
++                                             "text", COLUMN_NAME,
++                                             NULL);
++					          
++	gtk_tree_view_append_column (GTK_TREE_VIEW (dialog->details->avail_program_list), column);
++
++	dialog->details->add_icon_avail_paths = g_slist_reverse (dialog->details->add_icon_avail_paths);
++
++	if (!dialog->details->add_icons_idle_id) {
++		dialog->details->add_icons_idle_id =
++			g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, (GSourceFunc) eel_open_with_dialog_add_icon_idle,
++					 dialog, NULL);
++	}
++
++	dialog->details->add_avail_items_idle_id = 0;					 
++	return FALSE;
++}
++
++
+ static char *
+ remove_parameters (const char *exec)
+ {
+@@ -802,6 +1053,14 @@ program_list_selection_changed (GtkTreeS
+ 		return;
+ 	}
+ 
++	if (get_current_page (dialog)) {
++		gtk_tree_model_get (model, &iter, COLUMN_COMMENT, &temp, -1);
++		gtk_label_set_text (GTK_LABEL (dialog->details->desc_label2), sure_string (temp));
++		g_free (temp);
++		gtk_widget_set_sensitive (dialog->details->button, TRUE);
++		return;
++	}
++
+ 	path = NULL;
+ 	gtk_tree_model_get (model, &iter,
+ 			    COLUMN_PATH, &path,
+@@ -851,9 +1110,14 @@ program_list_selection_activated (GtkTre
+ 				  EelOpenWithDialog *dialog)
+ {
+ 	GtkTreeSelection *selection;
++	GtkTreeView *treeview;
++	if (get_current_page (dialog))
++		treeview = GTK_TREE_VIEW (dialog->details->avail_program_list);
++	else
++		treeview = GTK_TREE_VIEW (dialog->details->program_list);
+ 
+ 	/* update the entry with the info from the selection */
+-	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->details->program_list));	
++	selection = gtk_tree_view_get_selection (treeview);	
+ 	program_list_selection_changed (selection, dialog);
+ 	
+ 	gtk_dialog_response (GTK_DIALOG (&dialog->parent), RESPONSE_OPEN);
+@@ -876,16 +1140,47 @@ expander_toggled (GtkWidget *expander, E
+ }
+ 
+ static void
++tab_changed (GtkNotebook *notebook, GtkNotebookPage *page, gint index, EelOpenWithDialog *dialog)
++{
++	char *text;
++	GtkTreeView *treeview;
++
++	if (index) {
++		text = _("_Install");
++		treeview = GTK_TREE_VIEW (dialog->details->avail_program_list);
++	} else {
++		text = _("_Open");
++		treeview = GTK_TREE_VIEW (dialog->details->program_list);
++	}
++	gtk_label_set_text_with_mnemonic (GTK_LABEL(dialog->details->open_label), text);
++
++	gtk_widget_set_sensitive (dialog->details->button,
++				  gtk_tree_selection_get_selected (gtk_tree_view_get_selection (treeview),
++								   NULL, NULL));
++}
++
++static gboolean
++can_install_apps ()
++{
++	return g_file_test (APP_DESKTOP_DIR, G_FILE_TEST_IS_DIR) &&
++	       g_file_test (GKSU_PATH, G_FILE_TEST_IS_EXECUTABLE) &&
++	       g_file_test (SYNAPTIC_PATH, G_FILE_TEST_IS_EXECUTABLE);
++}
++
++static void
+ eel_open_with_dialog_instance_init (EelOpenWithDialog *dialog)
+ {
+ 	GtkWidget *hbox;
++	GtkWidget *vbox_out;
+ 	GtkWidget *vbox;
+ 	GtkWidget *vbox2;
+-	GtkWidget *label;
++	GtkWidget *vbox3;
+ 	GtkWidget *align;
+ 	GtkWidget *scrolled_window;
++	GtkWidget *scrolled_window2;
+ 	GtkWidget *expander;
+ 	GtkTreeSelection *selection;
++	GtkTreeSelection *selection2;
+ 
+ 	dialog->details = g_new0 (EelOpenWithDialogDetails, 1);
+ 
+@@ -897,19 +1192,23 @@ eel_open_with_dialog_instance_init (EelO
+ 
+ 	gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
+ 
+-	vbox = gtk_vbox_new (FALSE, 12);
+-	gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
+-
+-	vbox2 = gtk_vbox_new (FALSE, 6);
+-	gtk_box_pack_start (GTK_BOX (vbox), vbox2, TRUE, TRUE, 0);
++	vbox_out = gtk_vbox_new (FALSE, 6);
+ 
+ 	dialog->details->label = gtk_label_new ("");
+ 	gtk_misc_set_alignment (GTK_MISC (dialog->details->label), 0.0, 0.5);
+ 	gtk_label_set_line_wrap (GTK_LABEL (dialog->details->label), TRUE);
+-	gtk_box_pack_start (GTK_BOX (vbox2), dialog->details->label,
++	gtk_box_pack_start (GTK_BOX (vbox_out), dialog->details->label,
+ 			    FALSE, FALSE, 0);
+ 	gtk_widget_show (dialog->details->label);
+ 
++	if (can_install_apps ())
++		dialog->details->notebook = gtk_notebook_new ();
++
++	vbox = gtk_vbox_new (FALSE, 12);
++	gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
++
++	vbox2 = gtk_vbox_new (FALSE, 6);
++	gtk_box_pack_start (GTK_BOX (vbox), vbox2, TRUE, TRUE, 0);
+ 
+ 	scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ 	gtk_widget_set_size_request (scrolled_window, 400, 300);
+@@ -943,14 +1242,11 @@ eel_open_with_dialog_instance_init (EelO
+ 			  dialog);
+ 
+ 	dialog->details->add_items_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+-						     (GSourceFunc) eel_open_with_dialog_add_items_idle,
+-						      dialog, NULL);
++							      (GSourceFunc) eel_open_with_dialog_add_items_idle,
++							      dialog, NULL);
+ 
+-	
+-	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, TRUE, TRUE, 0);
+ 	gtk_widget_show_all (vbox);
+ 
+-
+ 	expander = gtk_expander_new_with_mnemonic (_("_Use a custom command"));
+ 	gtk_box_pack_start (GTK_BOX (vbox), expander, FALSE, FALSE, 0);
+ 	g_signal_connect_after (expander, "activate", G_CALLBACK (expander_toggled), dialog);
+@@ -973,6 +1269,60 @@ eel_open_with_dialog_instance_init (EelO
+ 			  G_CALLBACK (browse_clicked_cb), dialog);
+ 	gtk_box_pack_start (GTK_BOX (hbox), dialog->details->button, FALSE, FALSE, 0);
+ 	gtk_widget_show (dialog->details->button);
++	
++	if (dialog->details->notebook) {
++		gtk_box_pack_start (GTK_BOX (vbox_out), dialog->details->notebook, FALSE, FALSE, 0);
++		gtk_notebook_append_page (GTK_NOTEBOOK (dialog->details->notebook), vbox,
++					  gtk_label_new_with_mnemonic (_("_Installed applications")));
++
++		vbox3 = gtk_vbox_new (FALSE, 6);
++
++		scrolled_window2 = gtk_scrolled_window_new (NULL, NULL);
++		gtk_widget_set_size_request (scrolled_window2, 400, 300);
++	
++		gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window2),
++						     GTK_SHADOW_IN);
++		gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window2),
++						GTK_POLICY_AUTOMATIC,
++						GTK_POLICY_AUTOMATIC);
++		dialog->details->avail_program_list = gtk_tree_view_new ();
++		gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (dialog->details->avail_program_list),
++						   FALSE);
++		gtk_container_add (GTK_CONTAINER (scrolled_window2), dialog->details->avail_program_list);
++	
++		gtk_box_pack_start (GTK_BOX (vbox3), scrolled_window2, TRUE, TRUE, 0);
++
++		dialog->details->desc_label2 = gtk_label_new (_("Select an application to view its description."));
++		gtk_misc_set_alignment (GTK_MISC (dialog->details->desc_label2), 0.0, 0.5);
++		gtk_label_set_justify (GTK_LABEL (dialog->details->desc_label2), GTK_JUSTIFY_LEFT);
++		gtk_label_set_line_wrap (GTK_LABEL (dialog->details->desc_label2), TRUE);
++		gtk_label_set_single_line_mode (GTK_LABEL (dialog->details->desc_label2), FALSE);
++		gtk_box_pack_start (GTK_BOX (vbox3), dialog->details->desc_label2, FALSE, FALSE, 0);
++
++		selection2 = gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog->details->avail_program_list));
++		gtk_tree_selection_set_mode (selection2, GTK_SELECTION_SINGLE);
++		g_signal_connect (selection2, "changed",
++				  G_CALLBACK (program_list_selection_changed),
++				  dialog);
++		g_signal_connect (dialog->details->avail_program_list, "row-activated",
++				  G_CALLBACK (program_list_selection_activated),
++				  dialog);
++
++		dialog->details->add_avail_items_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
++									    (GSourceFunc) eel_open_with_dialog_add_avail_items_idle,
++									    dialog, NULL);
++
++		gtk_widget_show (vbox3);
++		gtk_notebook_append_page (GTK_NOTEBOOK (dialog->details->notebook), vbox3,
++					  gtk_label_new_with_mnemonic (_("_Available applications")));
++		gtk_widget_show (dialog->details->notebook);
++		g_signal_connect (dialog->details->notebook, "switch-page",
++				  G_CALLBACK (tab_changed), dialog);
++	} else {
++		gtk_box_pack_start (GTK_BOX (vbox_out), vbox, FALSE, FALSE, 0);
++	}
++	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox_out, TRUE, TRUE, 0);
++	gtk_widget_show_all (vbox_out);
+ 
+ 	gtk_dialog_add_button (GTK_DIALOG (dialog),
+ 			       GTK_STOCK_CANCEL,
+@@ -990,12 +1340,12 @@ eel_open_with_dialog_instance_init (EelO
+ 	hbox = gtk_hbox_new (FALSE, 2);
+ 	gtk_widget_show (hbox);
+ 
+-	label = gtk_label_new_with_mnemonic (_("_Open"));
+-	gtk_label_set_mnemonic_widget (GTK_LABEL (label), GTK_WIDGET (dialog->details->button));
+-	gtk_widget_show (label);
+-	dialog->details->open_label = label;
++	dialog->details->open_label = gtk_label_new (NULL);
++	tab_changed (NULL, NULL, 0, dialog);
++	gtk_label_set_mnemonic_widget (GTK_LABEL (dialog->details->open_label), GTK_WIDGET (dialog->details->button));
++	gtk_widget_show (dialog->details->open_label);
+ 
+-	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
++	gtk_box_pack_start (GTK_BOX (hbox), dialog->details->open_label, FALSE, FALSE, 0);
+ 
+ 	align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
+ 	gtk_widget_show (align);

Modified: desktop/unstable/eel2/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/unstable/eel2/debian/patches/series?rev=13482&op=diff
==============================================================================
--- desktop/unstable/eel2/debian/patches/series (original)
+++ desktop/unstable/eel2/debian/patches/series Sun Nov 18 16:35:38 2007
@@ -1,3 +1,4 @@
 01_libtool_release.patch
 02_ldflags_libadd.patch
+10_open-with_install.patch
 99_ltmain_as-needed.patch




More information about the pkg-gnome-commits mailing list