summaryrefslogtreecommitdiff
path: root/shell/slab-mate-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'shell/slab-mate-util.c')
-rw-r--r--shell/slab-mate-util.c160
1 files changed, 160 insertions, 0 deletions
diff --git a/shell/slab-mate-util.c b/shell/slab-mate-util.c
new file mode 100644
index 00000000..b036de18
--- /dev/null
+++ b/shell/slab-mate-util.c
@@ -0,0 +1,160 @@
+/*
+ * This file is part of libslab.
+ *
+ * Copyright (c) 2006 Novell, Inc.
+ *
+ * Libslab is free software; you can redistribute it and/or modify it under the
+ * terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation; either version 2 of the License, or (at your option)
+ * any later version.
+ *
+ * Libslab 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 Lesser General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with libslab; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "slab-mate-util.h"
+#include "libslab-utils.h"
+
+#include <gio/gio.h>
+#include <string.h>
+
+MateDesktopItem *
+load_desktop_item_from_unknown (const gchar *id)
+{
+ MateDesktopItem *item;
+ gchar *basename;
+
+ GError *error = NULL;
+
+ item = mate_desktop_item_new_from_uri (id, 0, &error);
+
+ if (! error)
+ return item;
+ else {
+ g_error_free (error);
+ error = NULL;
+ }
+
+ item = mate_desktop_item_new_from_file (id, 0, &error);
+
+ if (! error)
+ return item;
+ else {
+ g_error_free (error);
+ error = NULL;
+ }
+
+ item = mate_desktop_item_new_from_basename (id, 0, &error);
+
+ if (! error)
+ return item;
+ else {
+ g_error_free (error);
+ error = NULL;
+ }
+
+ basename = g_strrstr (id, "/");
+
+ if (basename) {
+ basename++;
+
+ item = mate_desktop_item_new_from_basename (basename, 0, &error);
+
+ if (! error)
+ return item;
+ else {
+ g_error_free (error);
+ error = NULL;
+ }
+ }
+
+ return NULL;
+}
+
+gboolean
+open_desktop_item_exec (MateDesktopItem * desktop_item)
+{
+ GError *error = NULL;
+
+ if (!desktop_item)
+ return FALSE;
+
+ mate_desktop_item_launch (desktop_item, NULL, MATE_DESKTOP_ITEM_LAUNCH_ONLY_ONE | MATE_DESKTOP_ITEM_LAUNCH_DO_NOT_REAP_CHILD, &error);
+
+ if (error)
+ {
+ g_warning ("error launching %s [%s]\n",
+ mate_desktop_item_get_location (desktop_item), error->message);
+
+ g_error_free (error);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+gboolean
+open_desktop_item_help (MateDesktopItem * desktop_item)
+{
+ const gchar *doc_path;
+ gchar *help_uri;
+
+ GError *error;
+
+ if (!desktop_item)
+ return FALSE;
+
+ doc_path = mate_desktop_item_get_string (desktop_item, "DocPath");
+
+ if (doc_path)
+ {
+ help_uri = g_strdup_printf ("help:%s", doc_path);
+
+ error = NULL;
+ if (!gtk_show_uri_on_window (NULL, help_uri, gtk_get_current_event_time (), &error))
+ {
+ g_warning ("error opening %s [%s]\n", help_uri, error->message);
+
+ g_free (help_uri);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_free (help_uri);
+ }
+ else
+ return FALSE;
+
+ return TRUE;
+}
+
+void
+copy_file (const gchar * src_uri, const gchar * dst_uri)
+{
+ GFile *src;
+ GFile *dst;
+ GError *error = NULL;
+ gboolean res;
+
+ src = g_file_new_for_uri (src_uri);
+ dst = g_file_new_for_uri (dst_uri);
+
+ res = g_file_copy (src, dst,
+ G_FILE_COPY_NONE,
+ NULL, NULL, NULL, &error);
+
+ if (!res)
+ {
+ g_warning ("error copying [%s] to [%s]: %s.", src_uri, dst_uri, error->message);
+ g_error_free (error);
+ }
+
+ g_object_unref (src);
+ g_object_unref (dst);
+}