Re: [PATCH] Open with dialog with a list of know applications
- From: michael gossard <michael gossard free fr>
- To: Jürg Billeter <j bitron ch>
- Cc: nautilus-list gnome org
- Subject: Re: [PATCH] Open with dialog with a list of know applications
- Date: Sat, 15 Jan 2005 17:01:44 +0400
Hi
Le vendredi 14 janvier 2005 à 22:11 +0100, Jürg Billeter a écrit :
> Thanks for your efforts. Unfortunately the long lines of your patch have
> been broken so it can't be applied anymore.
Sorry , I send it here as attachment. Hope it is ok now.
michaël gossard
--
\ | /
<@ @>
--oOO-(_)-OOo---
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 15 Jan 2005 11:46:18 -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 15 Jan 2005 11:46:20 -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_localestring (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 15 Jan 2005 11:46:21 -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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]