app: add gimp_mount_enclosing_volume(), using the the GimpGui vtable

and implement it in gui-vtable.c using gtk_mount_operation_new().
This commit is contained in:
Michael Natterer 2014-07-10 22:52:29 +02:00
parent a4b807905c
commit 5c1f14be67
3 changed files with 298 additions and 220 deletions

View File

@ -64,6 +64,7 @@ gimp_gui_init (Gimp *gimp)
gimp->gui.pdb_dialog_close = NULL; gimp->gui.pdb_dialog_close = NULL;
gimp->gui.recent_list_add_file = NULL; gimp->gui.recent_list_add_file = NULL;
gimp->gui.recent_list_load = NULL; gimp->gui.recent_list_load = NULL;
gimp->gui.mount_enclosing_volume = NULL;
} }
void void
@ -492,3 +493,20 @@ gimp_recent_list_load (Gimp *gimp)
if (gimp->gui.recent_list_load) if (gimp->gui.recent_list_load)
gimp->gui.recent_list_load (gimp); gimp->gui.recent_list_load (gimp);
} }
gboolean
gimp_mount_enclosing_volume (Gimp *gimp,
GFile *file,
GimpProgress *progress,
GError **error)
{
g_return_val_if_fail (GIMP_IS_GIMP (gimp), FALSE);
g_return_val_if_fail (G_IS_FILE (file), FALSE);
g_return_val_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
if (gimp->gui.mount_enclosing_volume)
return gimp->gui.mount_enclosing_volume (gimp, file, progress, error);
return FALSE;
}

View File

@ -93,6 +93,10 @@ struct _GimpGui
const gchar *mime_type); const gchar *mime_type);
void (* recent_list_load) (Gimp *gimp); void (* recent_list_load) (Gimp *gimp);
gboolean (* mount_enclosing_volume) (Gimp *gimp,
GFile *file,
GimpProgress *progress,
GError **error);
}; };
@ -171,5 +175,10 @@ gboolean gimp_recent_list_add_file (Gimp *gimp,
const gchar *mime_type); const gchar *mime_type);
void gimp_recent_list_load (Gimp *gimp); void gimp_recent_list_load (Gimp *gimp);
gboolean gimp_mount_enclosing_volume (Gimp *gimp,
GFile *file,
GimpProgress *progress,
GError **error);
#endif /* __GIMP_GUI_H__ */ #endif /* __GIMP_GUI_H__ */

View File

@ -88,8 +88,10 @@ static void gui_ungrab (Gimp *gimp);
static void gui_threads_enter (Gimp *gimp); static void gui_threads_enter (Gimp *gimp);
static void gui_threads_leave (Gimp *gimp); static void gui_threads_leave (Gimp *gimp);
static void gui_set_busy (Gimp *gimp); static void gui_set_busy (Gimp *gimp);
static void gui_unset_busy (Gimp *gimp); static void gui_unset_busy (Gimp *gimp);
static void gui_help (Gimp *gimp, static void gui_help (Gimp *gimp,
GimpProgress *progress, GimpProgress *progress,
const gchar *help_domain, const gchar *help_domain,
@ -142,6 +144,11 @@ static gboolean gui_recent_list_add_file (Gimp *gimp,
const gchar *mime_type); const gchar *mime_type);
static void gui_recent_list_load (Gimp *gimp); static void gui_recent_list_load (Gimp *gimp);
static gboolean gui_mount_enclosing_volume (Gimp *gimp,
GFile *file,
GimpProgress *progress,
GError **error);
/* public functions */ /* public functions */
@ -176,6 +183,7 @@ gui_vtable_init (Gimp *gimp)
gimp->gui.pdb_dialog_close = gui_pdb_dialog_close; gimp->gui.pdb_dialog_close = gui_pdb_dialog_close;
gimp->gui.recent_list_add_file = gui_recent_list_add_file; gimp->gui.recent_list_add_file = gui_recent_list_add_file;
gimp->gui.recent_list_load = gui_recent_list_load; gimp->gui.recent_list_load = gui_recent_list_load;
gimp->gui.mount_enclosing_volume = gui_mount_enclosing_volume;
} }
@ -732,3 +740,46 @@ gui_recent_list_load (Gimp *gimp)
gimp_container_thaw (gimp->documents); gimp_container_thaw (gimp->documents);
} }
static void
mount_volume_ready (GFile *file,
GAsyncResult *res,
GError **error)
{
g_file_mount_enclosing_volume_finish (file, res, error);
gtk_main_quit ();
}
static gboolean
gui_mount_enclosing_volume (Gimp *gimp,
GFile *file,
GimpProgress *progress,
GError **error)
{
GMountOperation *operation;
GtkWidget *toplevel = NULL;
GError *my_error = NULL;
if (GTK_IS_WIDGET (progress))
toplevel = gtk_widget_get_toplevel (GTK_WIDGET (progress));
operation = gtk_mount_operation_new (GTK_WINDOW (toplevel));
g_file_mount_enclosing_volume (file, G_MOUNT_MOUNT_NONE,
operation,
NULL,
(GAsyncReadyCallback) mount_volume_ready,
&my_error);
gtk_main ();
g_object_unref (operation);
if (my_error)
{
g_propagate_error (error, my_error);
return FALSE;
}
return TRUE;
}