[PATCH] Open with dialog with a list of know applications



Hi, 

this is a retry. I don't see my previous message in the mailing list
archive.

This patch provide a collapsible list of know applications like the
main-menu "Run dialog".
I woudn't surprised if I have made mistakes as it is the first time I
write a pacth.

Please review it

michaël Gossard

Index: configure.in
===================================================================
RCS file: /cvs/gnome/eel/configure.in,v
retrieving revision 1.178
diff -u -p -r1.178 configure.in
--- configure.in	11 Oct 2004 14:05:17 -0000	1.178
+++ configure.in	13 Jan 2005 14:07:17 -0000
@@ -14,6 +14,7 @@ POPT_REQUIRED=1.5
 XML_REQUIRED=2.4.7
 GAIL_REQUIRED=0.16
 LIBGLADE_REQUIRED=2.0.0
+LIBGNOME_DESKTOP_REQUIRED=2.1.4
 
 AC_SUBST(ART_REQUIRED)
 AC_SUBST(GCONF_REQUIRED)
@@ -82,6 +83,7 @@ PKG_CHECK_MODULES(EEL, [
 	libgnome-2.0		>= $GNOME_REQUIRED
 	libgnomeui-2.0		>= $GNOME_UI_REQUIRED
 	libxml-2.0		>= $XML_REQUIRED
+	gnome-desktop-2.0	>= $LIBGNOME_DESKTOP_REQUIRED
 ])
 AC_SUBST(EEL_CFLAGS)
 AC_SUBST(EEL_LIBS)
Index: eel/eel-open-with-dialog.c
===================================================================
RCS file: /cvs/gnome/eel/eel/eel-open-with-dialog.c,v
retrieving revision 1.3
diff -u -p -r1.3 eel-open-with-dialog.c
--- eel/eel-open-with-dialog.c	23 Jul 2004 16:20:18 -0000	1.3
+++ eel/eel-open-with-dialog.c	13 Jan 2005 14:07:19 -0000
@@ -30,12 +30,16 @@
 #include "eel-stock-dialogs.h"
 
 #include <string.h>
+#include <dirent.h>
 #include <glib/gi18n-lib.h>
 #include <gtk/gtkalignment.h>
 #include <gtk/gtkbox.h>
+#include <gtk/gtkcellrendererpixbuf.h>
+#include <gtk/gtkcellrenderertext.h>
 #include <gtk/gtkbutton.h>
 #include <gtk/gtkdialog.h>
 #include <gtk/gtkentry.h>
+#include <gtk/gtkexpander.h>
 #include <gtk/gtkfilechooserdialog.h>
 #include <gtk/gtkhbox.h>
 #include <gtk/gtkicontheme.h>
@@ -43,11 +47,17 @@
 #include <gtk/gtkiconfactory.h>
 #include <gtk/gtklabel.h>
 #include <gtk/gtkstock.h>
+#include <gtk/gtkscrolledwindow.h>
+#include <gtk/gtktreeview.h>
+#include <gtk/gtktreeselection.h>
 #include <gtk/gtkvbox.h>
+#include <libgnome/gnome-desktop-item.h>
+#include <libgnomevfs/gnome-vfs-directory.h>
 #include <libgnomevfs/gnome-vfs-mime-handlers.h>
 #include <libgnomevfs/gnome-vfs-uri.h>
 
-struct _EelOpenWithDialogDetails {
+
+ struct _EelOpenWithDialogDetails {
 	char *uri;
 
 	char *mime_type;
@@ -61,6 +71,33 @@ struct _EelOpenWithDialogDetails {
 
 	GtkWidget *open_label;
 	GtkWidget *open_image;
+	GtkWidget *image;
+	GtkWidget *program_list;
+	GtkWidget *program_list_box;
+	GtkWidget *description;
+	GtkListStore *program_list_store;
+	GSList 	*add_icon_paths;
+	int	add_items_idle_id;
+	int	add_icons_idle_id;
+
+};
+
+typedef struct _Application {
+	char *icon;
+	char *fullname;
+	char *comment;
+	char *name;
+	char *exec;
+} Application;
+
+enum {
+	COLUMN_ICON,
+	COLUMN_ICON_FILE,
+	COLUMN_NAME,
+	COLUMN_COMMENT,
+	COLUMN_URI,
+	COLUMN_EXEC,
+	NUM_COLUMNS
 };
 
 enum {
@@ -75,10 +112,87 @@ enum {
 static gpointer parent_class;
 static guint signals[LAST_SIGNAL] = { 0 };
 
+static GSList* application_list = NULL;
+static void visit_directory (const gchar * dirname);
+GdkPixbuf *get_pixbuf_with_size (const char *filename, int size);
+
+static void
+read_desktop_file (const gchar *filename)
+{
+	Application * app;
+	GnomeDesktopItem *item;
+
+	g_return_if_fail (filename != NULL);
+
+	item = gnome_desktop_item_new_from_uri (filename,
+						GNOME_DESKTOP_ITEM_LOAD_ONLY_IF_EXISTS,
+						NULL);
+	if (item != NULL &&
+	    gnome_desktop_item_get_entry_type (item) ==
GNOME_DESKTOP_ITEM_TYPE_APPLICATION) {
+		app = g_new0 (Application, 1);
+
+		app->icon = g_strdup (gnome_desktop_item_get_string (item,
GNOME_DESKTOP_ITEM_ICON));
+		app->fullname = g_strdup (gnome_desktop_item_get_string (item,
GNOME_DESKTOP_ITEM_GENERIC_NAME));
+		app->comment = g_strdup (gnome_desktop_item_get_localestring (item,
GNOME_DESKTOP_ITEM_COMMENT));
+		app->name = g_strdup (gnome_desktop_item_get_string (item,
GNOME_DESKTOP_ITEM_NAME));
+		app->exec = g_strdup (gnome_desktop_item_get_string (item,
GNOME_DESKTOP_ITEM_EXEC));
+
+
+		gnome_desktop_item_unref (item);
+		application_list = g_slist_prepend (application_list, app);
+	}
+}
+
+static gboolean
+visit_directory_cb (const gchar *rel_path,
+		    GnomeVFSFileInfo *info,
+		    gboolean recursing_will_loop,
+		    gpointer data,
+		    gboolean *recurse)
+{
+	if (info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) {
+		gchar *dir;
+		dir = g_build_path ("/", data, info->name, NULL);
+		visit_directory (dir);
+		g_free (dir);
+		return TRUE;
+	}
+	if (info->type == GNOME_VFS_FILE_TYPE_REGULAR) {
+		gchar *filename;
+		filename = g_build_path ("/", data, info->name, NULL);
+		read_desktop_file (filename);
+		g_free (filename);
+		return TRUE;
+	}
+	return FALSE;
+}
+
+static void
+visit_directory (const gchar * dirname)
+{
+	g_return_if_fail (dirname != NULL);
+
+	gnome_vfs_directory_visit (dirname,
+				   GNOME_VFS_FILE_INFO_DEFAULT,
+				   GNOME_VFS_DIRECTORY_VISIT_DEFAULT,
+				   visit_directory_cb,
+				   (gpointer) dirname);
+}
 static void
 eel_open_with_dialog_finalize (GObject *object)
 {
 	EelOpenWithDialog *dialog;
+	GSList *l;
+
+	for (l = application_list; l != NULL; l = l->next) {
+		Application *app = l->data;
+		g_free (app->name);
+		g_free (app->fullname);
+		g_free (app->comment);
+		g_free (app->icon);
+		g_free (app->exec);
+	}
+	g_slist_free (application_list);
 
 	dialog = EEL_OPEN_WITH_DIALOG (object);
 
@@ -423,6 +537,297 @@ get_run_dialog_image (void)
 	return image;
 }
 
+static char *
+remove_parameters (const char *exec)
+{
+	GString *str;
+	char    *retval, *p;
+
+	str = g_string_new (exec);
+
+	while ((p = strstr (str->str, "%"))) {
+		switch (p [1]) {
+		case '%':
+			g_string_erase (str, p - str->str, 1);
+			break;
+		case 'U':
+		case 'F':
+		case 'N':
+		case 'D':
+		case 'f':
+		case 'u':
+		case 'd':
+		case 'n':
+		case 'm':
+		case 'i':
+		case 'c':
+		case 'k':
+		case 'v':
+			g_string_erase (str, p - str->str, 2);
+			break;
+		default:
+			break;
+		}
+	}
+
+	retval = str->str;
+	g_string_free (str, FALSE);
+
+	return retval;
+}
+
+static char *
+program_list_selection_get_value (GtkTreeModel *tree_model,
+				  GtkTreeIter  *iter,
+				  gint          column)
+{
+	GValue	value = {0, };
+	char	*result;
+	
+	g_return_val_if_fail (GTK_IS_TREE_MODEL (tree_model), NULL);
+	g_return_val_if_fail (iter != NULL, NULL);
+
+	gtk_tree_model_get_value (tree_model, iter, column, &value);
+	result = g_strdup (g_value_get_string (&value));
+	g_value_unset (&value);
+
+	return result;
+}
+
+static void
+program_list_selection_changed (GtkTreeSelection *selection,
+				EelOpenWithDialog *dialog)
+{
+	GtkTreeModel	*model;
+	GtkTreeIter	iter;
+	char		*uri, *stripped;
+	char		*description, *icon_file;
+	char		*file;
+	GdkPixbuf	*pixbuf = NULL;
+
+	g_return_if_fail (GTK_IS_TREE_SELECTION (selection));
+
+	if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+		return;
+
+	uri = program_list_selection_get_value (model, &iter, COLUMN_EXEC);
+	if (uri) {
+		stripped = remove_parameters (uri);
+		gtk_entry_set_text (GTK_ENTRY (dialog->details->entry), stripped);
+		g_free (stripped);
+		g_free (uri);
+	}
+
+	description = program_list_selection_get_value (model, &iter,
COLUMN_COMMENT);
+	if (description) {
+		gtk_label_set_text (GTK_LABEL (dialog->details->description),
description);
+		g_free (description);
+	}
+	
+	icon_file = program_list_selection_get_value (model, &iter,
COLUMN_ICON_FILE);
+	if (icon_file) {
+		file = gnome_desktop_item_find_icon (NULL, icon_file, 48, 0);
+		if (file) {
+			pixbuf = gdk_pixbuf_new_from_file (file, NULL);
+			if (pixbuf) {
+				gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->details->image),
pixbuf);
+				gtk_window_set_icon (GTK_WINDOW (dialog), pixbuf);
+				g_object_unref (pixbuf);
+			}
+		g_free (file);
+		}
+	g_free (icon_file);
+	}
+}
+
+static void
+program_list_selection_activated (GtkTreeView		*view,
+				  GtkTreePath		*path,
+				  GtkTreeViewColumn	*column,
+				  EelOpenWithDialog 	*dialog)
+{
+
+	GtkTreeSelection *selection;
+	
+	g_return_if_fail (EEL_IS_OPEN_WITH_DIALOG (dialog));
+	g_return_if_fail (GTK_IS_TREE_VIEW (view));
+	g_return_if_fail (path != NULL),
+	g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (column));
+
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW
(dialog->details->program_list));
+	program_list_selection_changed (selection, dialog);
+}
+
+GdkPixbuf *
+get_pixbuf_with_size (const char *filename, int size)
+{
+	GdkPixbuf *pixbuf;
+	
+	g_return_val_if_fail (filename != NULL, NULL);
+	g_return_val_if_fail (size > 0, NULL);
+	
+	pixbuf = gdk_pixbuf_new_from_file (filename, NULL);
+	if (!pixbuf)
+		return NULL;
+	
+	if (gdk_pixbuf_get_width (pixbuf) != size ||
+	    gdk_pixbuf_get_height (pixbuf) != size ) {
+		
+		GdkPixbuf *pb;
+		pb = gdk_pixbuf_scale_simple (pixbuf, size, size,
GDK_INTERP_BILINEAR);
+		g_object_unref (G_OBJECT (pixbuf));
+		pixbuf = pb;
+	}
+
+	return pixbuf;
+}
+
+static gboolean
+eel_open_with_dialog_add_icon_idle (EelOpenWithDialog *dialog)
+{
+	GSList *l;
+	GtkTreeIter iter;
+	GtkTreePath *path;
+	GdkPixbuf   *pixbuf;
+	char *file;
+	char *icon_filename;
+	
+	g_return_val_if_fail (EEL_IS_OPEN_WITH_DIALOG (dialog), FALSE);
+
+	for (l = dialog->details->add_icon_paths; l != NULL; l = l->next) {
+		path = l->data;
+		if (gtk_tree_model_get_iter (GTK_TREE_MODEL
(dialog->details->program_list_store),
+					     &iter,
+					     path)) {
+			
+			gtk_tree_model_get (GTK_TREE_MODEL
(dialog->details->program_list_store), &iter,
+					    COLUMN_ICON_FILE, &icon_filename, -1);
+			
+			file = gnome_desktop_item_find_icon (NULL, icon_filename, 24, 0);
+			if (file) {
+				pixbuf = get_pixbuf_with_size (file, 24);
+				if (pixbuf) {
+					gtk_list_store_set (dialog->details->program_list_store,
+							    &iter,
+							    COLUMN_ICON,
+							    pixbuf, -1);
+					g_object_unref (pixbuf);
+				}
+				g_free (file);
+			}
+			g_free (icon_filename);
+		}
+	}
+		
+	g_slist_foreach (dialog->details->add_icon_paths,
(GFunc)gtk_tree_path_free, NULL);
+	g_slist_free (dialog->details->add_icon_paths);
+	return FALSE;
+}
+static gboolean
+eel_open_with_dialog_add_items_idle (EelOpenWithDialog *dialog)
+{
+	GtkCellRenderer   *renderer;
+	GtkTreeViewColumn *column;
+        
+	g_return_val_if_fail (EEL_IS_OPEN_WITH_DIALOG (dialog), FALSE);
+
+	/* create list store */
+	dialog->details->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);
+
+	visit_directory ("applications:");
+
+
+	while (application_list != NULL) {
+		GtkTreeIter iter;
+		Application *app;
+		GtkTreePath *path;
+
+		app = application_list->data;
+
+		gtk_list_store_append (dialog->details->program_list_store, &iter);
+		gtk_list_store_set (dialog->details->program_list_store, &iter,
+				    COLUMN_ICON,      NULL,
+				    COLUMN_ICON_FILE, (app->icon) ? app->icon : "",
+				    COLUMN_NAME,  (app->name) ? app->name : "",
+				    COLUMN_COMMENT,   (app->comment) ? app->comment : "",
+				    COLUMN_URI,       (app->fullname) ? app->fullname : "",
+				    COLUMN_EXEC,      (app->exec) ? app->exec : "",
+				    -1);
+
+		path = gtk_tree_model_get_path (GTK_TREE_MODEL
(dialog->details->program_list_store), &iter);
+
+		if (path != NULL)
+			dialog->details->add_icon_paths = g_slist_prepend
(dialog->details->add_icon_paths, path);
+
+		application_list = application_list->next;
+	}
+
+	gtk_tree_view_set_model (GTK_TREE_VIEW
(dialog->details->program_list), 
+				 GTK_TREE_MODEL (dialog->details->program_list_store));
+
+	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->program_list), column);
+
+	dialog->details->add_icon_paths = g_slist_reverse
(dialog->details->add_icon_paths);
+
+	if (!dialog->details->add_icons_idle_id)
+		dialog->details->add_icons_idle_id =
+			g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)
eel_open_with_dialog_add_icon_idle,
+					 dialog, NULL);
+
+	dialog->details->add_items_idle_id = 0;					 
+	return FALSE;
+
+}
+
+
+static void
+eel_open_with_dialog_setup_program_list (EelOpenWithDialog *dialog)
+{
+	GtkTreeSelection *selection;
+	
+	/* Ref the box so it doesn't get destroyed when it is
+	 * removed from the visible area of the dialog box.
+	 */
+	g_object_ref (dialog->details->program_list_box);
+	
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW
(dialog->details->program_list));
+	gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
+
+        g_signal_connect (selection, "changed",
+			  G_CALLBACK (program_list_selection_changed),
+			  dialog);
+
+        g_signal_connect (dialog->details->program_list,
"row-activated",
+			  G_CALLBACK (program_list_selection_activated),
+			  dialog);
+
+	/* start loading the list of applications */
+	dialog->details->add_items_idle_id = 
+	g_idle_add_full (G_PRIORITY_LOW, (GSourceFunc)
eel_open_with_dialog_add_items_idle, 
+					 dialog, NULL);
+}
+
+
+
 static void
 eel_open_with_dialog_instance_init (EelOpenWithDialog *dialog)
 {
@@ -432,11 +837,15 @@ eel_open_with_dialog_instance_init (EelO
 	GtkWidget *image;
 	GtkWidget *label;
 	GtkWidget *align;
-
+	GtkWidget *alignement;
+	GtkWidget *list_expander;
+	GtkWidget *scrolledwindow;
+	GtkWidget *label_expander;
+		
 	dialog->details = g_new0 (EelOpenWithDialogDetails, 1);
 
 	gtk_window_set_title (GTK_WINDOW (dialog), _("Open With"));
-	gtk_window_set_default_size (GTK_WINDOW (dialog), 300, -1);
+	gtk_window_set_default_size (GTK_WINDOW (dialog), 100, 300);
 	gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
 	gtk_container_set_border_width (GTK_CONTAINER (dialog), 6);
 	gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
@@ -449,17 +858,22 @@ eel_open_with_dialog_instance_init (EelO
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox,
 			    TRUE, TRUE, 0);
 	gtk_widget_show (hbox);
-
-	image = get_run_dialog_image ();
-	gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0);
-	gtk_widget_show (image);
-	gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0);
+	
+	alignement = gtk_alignment_new(0, 0.5, 0, 0);
+	gtk_widget_show (alignement);
+	gtk_box_pack_start (GTK_BOX (hbox), alignement, FALSE, FALSE, 10);
+
+	dialog->details->image = get_run_dialog_image ();
+	gtk_misc_set_alignment (GTK_MISC (dialog->details->image), 0.5, 0.0);
+	gtk_widget_show (dialog->details->image);
+	gtk_container_add (GTK_CONTAINER (alignement),
dialog->details->image);
 
 	/* Pack the text and the entry */
 	vbox = gtk_vbox_new (FALSE, 6);
 	gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);
 	gtk_widget_show (vbox);
 
+	
 	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);
@@ -478,6 +892,44 @@ eel_open_with_dialog_instance_init (EelO
 			    TRUE, TRUE, 0);
 	gtk_widget_show (dialog->details->entry);
 
+	list_expander = gtk_expander_new (NULL);
+	gtk_widget_show (list_expander);
+	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox),
+				list_expander, TRUE, TRUE,0);
+	gtk_expander_set_expanded (GTK_EXPANDER (list_expander), FALSE);
+
+	label_expander = gtk_label_new_with_mnemonic (_("Show list of know
_applications"));
+	gtk_widget_show (label_expander);
+	gtk_expander_set_label_widget (GTK_EXPANDER(list_expander),
label_expander);
+
+	dialog->details->program_list_box = gtk_vbox_new (FALSE, 6);
+	gtk_widget_show (dialog->details->program_list_box);
+	gtk_container_add (GTK_CONTAINER (list_expander),
dialog->details->program_list_box);
+
+
+
+	scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
+	gtk_widget_show (scrolledwindow);
+	gtk_box_pack_start (GTK_BOX (dialog->details->program_list_box),
scrolledwindow, TRUE, TRUE, 0);
+	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), 
+					GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW
(scrolledwindow), 
+						GTK_SHADOW_IN);
+
+	dialog->details->program_list = gtk_tree_view_new ();
+	gtk_widget_show (dialog->details->program_list);
+	gtk_container_add (GTK_CONTAINER (scrolledwindow),
dialog->details->program_list);
+	gtk_tree_view_set_headers_visible (GTK_TREE_VIEW
(dialog->details->program_list), FALSE);
+
+	dialog->details->description = gtk_label_new (_("Select an application
to view its description."));
+	gtk_widget_show (dialog->details->description);
+	gtk_box_pack_start (GTK_BOX (dialog->details->program_list_box), 
+			    dialog->details->description, FALSE, FALSE, 0);
+	GTK_WIDGET_SET_FLAGS (dialog->details->description, GTK_CAN_FOCUS);
+	gtk_label_set_line_wrap (GTK_LABEL (dialog->details->description),
TRUE);
+	gtk_label_set_selectable (GTK_LABEL (dialog->details->description),
TRUE);
+	gtk_misc_set_alignment (GTK_MISC (dialog->details->description), 0,
0.5);
+
 	button = gtk_button_new_with_mnemonic (_("_Browse..."));
 	g_signal_connect (button, "clicked",
 			  G_CALLBACK (browse_clicked_cb), dialog);
@@ -615,7 +1067,7 @@ eel_open_with_dialog_new (const char *ur
 	dialog = gtk_widget_new (EEL_TYPE_OPEN_WITH_DIALOG, NULL);
 
 	set_uri_and_mime_type (EEL_OPEN_WITH_DIALOG (dialog), uri, mime_type);
-
+	eel_open_with_dialog_setup_program_list
(EEL_OPEN_WITH_DIALOG(dialog));
 	return dialog;
 }
 
Index: eel/eel-open-with-dialog.h
===================================================================
RCS file: /cvs/gnome/eel/eel/eel-open-with-dialog.h,v
retrieving revision 1.2
diff -u -p -r1.2 eel-open-with-dialog.h
--- eel/eel-open-with-dialog.h	22 Jul 2004 03:55:49 -0000	1.2
+++ eel/eel-open-with-dialog.h	13 Jan 2005 14:07:20 -0000
@@ -29,11 +29,13 @@
 #include <gtk/gtkdialog.h>
 #include <libgnomevfs/gnome-vfs-mime-handlers.h>
 
-#define EEL_TYPE_OPEN_WITH_DIALOG
(eel_open_with_dialog_get_type ())
+#define EEL_TYPE_OPEN_WITH_DIALOG	   (eel_open_with_dialog_get_type ())
 #define EEL_OPEN_WITH_DIALOG(obj)         (G_TYPE_CHECK_INSTANCE_CAST
((obj), EEL_TYPE_OPEN_WITH_DIALOG, EelOpenWithDialog))
 #define EEL_OPEN_WITH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST
((klass), EEL_TYPE_OPEN_WITH_DIALOG, EelOpenWithDialogClass))
-#define EEL_IS_OPEN_WITH_DIALOG(obj)      (G_TYPE_INSTANCE_CHECK_TYPE
((obj), EEL_TYPE_OPEN_WITH_DIALOG)
-
+#define EEL_IS_OPEN_WITH_DIALOG(obj)      (G_TYPE_CHECK_INSTANCE_TYPE
((obj), EEL_TYPE_OPEN_WITH_DIALOG))
+#define EEL_IS_OPEN_WITH_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE
((klass), EEL_TYPE_OPEN_WITH_DIALOG))
+#define EEL_OPEN_WITH_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS
((obj), EEL_TYPE_OPEN_WITH_DIALOG, EelOpenwithDialogClass)
+					     
 typedef struct _EelOpenWithDialog        EelOpenWithDialog;
 typedef struct _EelOpenWithDialogClass   EelOpenWithDialogClass;
 typedef struct _EelOpenWithDialogDetails EelOpenWithDialogDetails;

-- 
     \ | /
     <@ @>
--oOO-(_)-OOo---





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