[gnome-control-center/wip/jsparber/background: 1/41] background: add handler for "Photo" and "Files" button
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center/wip/jsparber/background: 1/41] background: add handler for "Photo" and "Files" button
- Date: Thu, 8 Feb 2018 16:11:34 +0000 (UTC)
commit f6d22d6da627ad51b56b3acc949b11c40c4c22f7
Author: Julian Sparber <julian sparber net>
Date: Sun Nov 5 17:01:46 2017 +0100
background: add handler for "Photo" and "Files" button
https://bugzilla.gnome.org/show_bug.cgi?id=788515
panels/background/cc-background-panel.c | 110 ++++++++++++++++++++++++++++++--
1 file changed, 106 insertions(+), 4 deletions(-)
---
diff --git a/panels/background/cc-background-panel.c b/panels/background/cc-background-panel.c
index 08863fce3..54c1170d0 100644
--- a/panels/background/cc-background-panel.c
+++ b/panels/background/cc-background-panel.c
@@ -24,6 +24,7 @@
#include <glib.h>
#include <glib/gi18n-lib.h>
#include <glib/gstdio.h>
+#include <gio/gdesktopappinfo.h>
#include <gdesktop-enums.h>
@@ -736,9 +737,9 @@ on_background_select (GtkFlowBox *box,
gboolean
do_foreach_background_item (GtkTreeModel *model,
- GtkTreePath *path,
- GtkTreeIter *iter,
- gpointer data)
+ GtkTreePath *path,
+ GtkTreeIter *iter,
+ gpointer data)
{
CcBackgroundPanel *panel = data;
CcBackgroundGridItem *flow;
@@ -783,7 +784,94 @@ on_source_added_cb (GtkTreeModel *model,
}
static void
-load_wallpapers (CcBackgroundPanel *panel, GtkWidget *parent)
+on_open_gnome_photos (GtkWidget *widget,
+ gpointer user_data)
+{
+ GdkAppLaunchContext *context;
+ GDesktopAppInfo *appInfo;
+ GError **error = NULL;
+
+ context = gdk_display_get_app_launch_context (gdk_display_get_default ());
+ appInfo = g_desktop_app_info_new("org.gnome.Photos.desktop");
+
+ g_object_unref (context);
+
+ if (appInfo == NULL) {
+ g_debug ("Gnome Photos is not installed.");
+ }
+ else {
+ g_app_info_launch (appInfo, NULL, context, error);
+ g_prefix_error (error,
+ ("Problem opening Gnome Photos: "));
+
+ g_object_unref (appInfo);
+ }
+}
+
+static void
+on_open_picture_folder (GtkWidget *widget,
+ gpointer user_data)
+{
+ GDBusProxy *proxy;
+ GVariant *retval;
+ GVariantBuilder *builder;
+ const gchar *uri;
+ GError **error = NULL;
+ const gchar *path;
+
+ path = g_get_user_special_dir (G_USER_DIRECTORY_PICTURES);
+
+ uri = g_filename_to_uri (path, NULL, error);
+
+ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_DBUS_PROXY_FLAGS_NONE,
+ NULL,
+ "org.freedesktop.FileManager1",
+ "/org/freedesktop/FileManager1",
+ "org.freedesktop.FileManager1",
+ NULL, error);
+
+ if (!proxy) {
+ g_prefix_error (error,
+ ("Connecting to org.freedesktop.FileManager1 failed: "));
+ }
+ else {
+
+ builder = g_variant_builder_new (G_VARIANT_TYPE ("as"));
+ g_variant_builder_add (builder, "s", uri);
+
+ retval = g_dbus_proxy_call_sync (proxy,
+ "ShowFolders",
+ g_variant_new ("(ass)",
+ builder,
+ ""),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1, NULL, error);
+
+ g_variant_builder_unref (builder);
+ g_object_unref (proxy);
+
+ if (!retval)
+ {
+ g_prefix_error (error, ("Calling ShowFolders failed: "));
+ }
+ else
+ g_variant_unref (retval);
+ }
+}
+
+static gboolean
+is_gnome_photos_installed ()
+{
+ if (g_desktop_app_info_new("org.gnome.Photos.desktop") == NULL) {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static void
+load_wallpapers (CcBackgroundPanel *panel,
+ GtkWidget *parent)
{
GtkListStore *model;
GtkTreeIter iter;
@@ -855,6 +943,20 @@ cc_background_panel_init (CcBackgroundPanel *panel)
panel->thumb_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
+
+ /* add button handler */
+ widget = WID ("open-gnome-photos");
+ g_signal_connect (G_OBJECT (widget), "clicked",
+ G_CALLBACK (on_open_gnome_photos), panel);
+
+ if (!is_gnome_photos_installed ()) {
+ gtk_widget_hide (widget);
+ }
+
+ widget = WID ("open-picture-folder");
+ g_signal_connect (G_OBJECT (widget), "clicked",
+ G_CALLBACK (on_open_picture_folder), panel);
+
/* add the gallery widget */
widget = WID ("background-gallery");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]