[glom/glom-1-26] Revert "Actually remove gst-package.[h.c]."
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom/glom-1-26] Revert "Actually remove gst-package.[h.c]."
- Date: Mon, 9 Feb 2015 15:06:12 +0000 (UTC)
commit 4fe55303b1b74171ab924ed06071e16c1913cfcb
Author: Murray Cumming <murrayc murrayc com>
Date: Mon Feb 9 14:16:33 2015 +0100
Revert "Actually remove gst-package.[h.c]."
This reverts commit c4b7bb4ee989929db26561d997e77c58abd4e8cc.
glom/libglom/gst-package.c | 220 ++++++++++++++++++++++++++++++++++++++++++++
glom/libglom/gst-package.h | 42 +++++++++
2 files changed, 262 insertions(+), 0 deletions(-)
---
diff --git a/glom/libglom/gst-package.c b/glom/libglom/gst-package.c
new file mode 100644
index 0000000..96f4308
--- /dev/null
+++ b/glom/libglom/gst-package.c
@@ -0,0 +1,220 @@
+/* -*- Mode: C; c-file-style: "gnu"; tab-width: 8 -*- */
+/*
+ * Copyright (C) 2004 Vincent Untz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Authors: Vincent Untz <vincent vuntz net>
+ * Guillaume Desmottes <cass skynet be>
+ * Carlos Garnacho <carlosg gnome org>
+ */
+
+/* TODO: Use PackageKit? Is that recommended on all major distros now? */
+/* Commented-out because this is only useful when
+ * using the example code while patching
+ * ConnectionPoolBackends::PostgresSelf::install_postgres().
+ */
+#if 0
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include <gdk/gdkspawn.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "gst-package.h"
+
+static void
+show_error_dialog (GtkWindow *window,
+ const gchar *secondary_text)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (window,
+ GTK_DIALOG_MODAL,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_CLOSE,
+ _("Could not install package"));
+
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), secondary_text);
+ gtk_dialog_run (GTK_DIALOG (dialog));
+ gtk_widget_destroy (dialog);
+}
+
+static gboolean
+find_app (GtkWindow *window,
+ const gchar *app)
+{
+ gchar *path;
+
+ path = g_find_program_in_path (app);
+
+ if(!path)
+ {
+ show_error_dialog (window,
+ _("The necessary applications to install"
+ " the package could not be found."));
+ return FALSE;
+ }
+
+ g_free (path);
+
+ return TRUE;
+}
+
+static gchar *
+create_temp_file (const gchar *packages[])
+{
+ int fd;
+ gchar *path, *str;
+
+ path = g_strdup_printf ("/tmp/packages.XXXXXX");
+ fd = mkstemp (path);
+
+ while (*packages)
+ {
+ str = g_strdup_printf ("%s\ti\n", *packages);
+ write (fd, str, strlen (str));
+ g_free (str);
+ packages++;
+ }
+
+ close (fd);
+ return path;
+}
+
+static gchar*
+get_synaptic_command_line (GtkWindow *window,
+ const gchar *path)
+{
+ gchar *synaptic_path, *command;
+
+ synaptic_path = g_find_program_in_path ("synaptic");
+ command = g_strdup_printf ("%s --hide-main-window --non-interactive "
+ "--set-selections-file %s --parent-window-id %d",
+ synaptic_path, path, GDK_WINDOW_XID (GTK_WIDGET (window)->window));
+ g_free (synaptic_path);
+ return command;
+}
+
+static gboolean
+spawn_synaptic (GtkWindow *window,
+ const gchar *path,
+ gint *child_pid)
+{
+ gchar **argv;
+ GError *error = NULL;
+ gboolean retval = TRUE;
+ gint i = 0;
+
+ argv = g_new0 (gchar*, 6);
+ argv[i++] = g_find_program_in_path ("gksudo");
+ argv[i++] = g_strdup ("--desktop");
+ argv[i++] = g_strdup ("/usr/share/applications/synaptic.desktop");
+ argv[i++] = g_strdup ("--disable-grab");
+ argv[i++] = get_synaptic_command_line (window, path);
+ argv[i++] = NULL;
+
+ if (!gdk_spawn_on_screen (gtk_window_get_screen (window),
+ NULL, argv, NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL, child_pid, &error))
+ {
+ show_error_dialog (window, (error) ? error->message : "");
+ g_error_free (error);
+ retval = FALSE;
+ }
+
+ g_strfreev (argv);
+
+ return retval;
+}
+
+gboolean
+on_wait_timeout (gpointer data)
+{
+ gint pid, status;
+
+ pid = GPOINTER_TO_INT (data);
+
+ if (waitpid (pid, &status, WNOHANG) > 0)
+ {
+ /* FIXME: should show an error dialog if the installation fails,
+ * but funnily I'm getting always an exit status 0 here... maybe gksudo fault? */
+ gtk_main_quit ();
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+wait_for_synaptic (GtkWindow *window, gint pid)
+{
+ GdkCursor *cursor;
+ gint timer;
+
+ cursor = gdk_cursor_new (GDK_WATCH);
+ gdk_window_set_cursor (GTK_WIDGET (window)->window, cursor);
+ gtk_widget_set_sensitive (GTK_WIDGET (window), FALSE);
+
+ /* wait here a bit until the process has exited */
+ timer = g_timeout_add (500, on_wait_timeout, GINT_TO_POINTER (pid));
+ gtk_main ();
+
+ g_source_remove (timer);
+ gtk_widget_set_sensitive (GTK_WIDGET (window), TRUE);
+ gdk_window_set_cursor (GTK_WIDGET (window)->window, NULL);
+
+ gdk_cursor_unref (cursor);
+
+ /* keep this until we can get status
+ * info from the launched process */
+ return TRUE;
+}
+
+gboolean
+gst_packages_install (GtkWindow *window,
+ const gchar *packages[])
+{
+ gchar *path;
+ pid_t pid;
+ gboolean retval = FALSE;
+
+ g_return_val_if_fail (GTK_IS_WINDOW (window), FALSE);
+
+ if (!find_app (window, "synaptic") || !find_app (window, "gksudo"))
+ return FALSE;
+
+ path = create_temp_file (packages);
+
+ if (spawn_synaptic (window, path, &pid))
+ retval = wait_for_synaptic (window, pid);
+
+ unlink (path);
+ g_free (path);
+
+ return retval;
+}
+
+#endif /* if 0 */
+
diff --git a/glom/libglom/gst-package.h b/glom/libglom/gst-package.h
new file mode 100644
index 0000000..357dc83
--- /dev/null
+++ b/glom/libglom/gst-package.h
@@ -0,0 +1,42 @@
+/* -*- Mode: C; tab-width: 2; indent-tabs-mode: t; c-basic-offset: 2 -*- */
+/*
+ * Copyright (C) 2004 Vincent Untz
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Authors: Carlos Garnacho Parro <carlosg gnome org>
+ * Authors: Vincent Untz <vincent vuntz net>
+ * Authors: Guillaume Desmottes <cass skynet be>
+ */
+
+/* Commented-out because this is only useful when
+ * using the example code while patching ConnectionPool::install_postgres().
+ */
+#if 0
+
+#ifndef __GST_PACKAGES_H__
+#define __GST_PACKAGES_H__
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+gboolean gst_packages_install (GtkWindow *window, const char **packages);
+
+G_END_DECLS
+
+#endif /* __GST_PACKAGES_H__ */
+
+#endif /* if 0 */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]