From 872ad21e6330d72c6b5d42e423c6bab5def32d69 Mon Sep 17 00:00:00 2001 From: Eric Koegel Date: Fri, 6 Jan 2012 14:19:07 +0300 Subject: [PATCH] Single click option to open items on desktop. This patch adds support to launch items from a single left click based on an xfconf property /desktop-icons/single-click. --- doc/README.xfconf | 1 + src/xfdesktop-icon-view.c | 47 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 0 deletions(-) diff --git a/doc/README.xfconf b/doc/README.xfconf index 2fa1c40..bcc68e4 100644 --- a/doc/README.xfconf +++ b/doc/README.xfconf @@ -37,6 +37,7 @@ property is listd after the name. + diff --git a/src/xfdesktop-icon-view.c b/src/xfdesktop-icon-view.c index 0736006..8317081 100644 --- a/src/xfdesktop-icon-view.c +++ b/src/xfdesktop-icon-view.c @@ -48,9 +48,11 @@ #include "xfdesktop-icon-view.h" #include "xfdesktop-marshal.h" +#include "xfdesktop-common.h" #include #include +#include #define DEFAULT_FONT_SIZE 12 #define DEFAULT_ICON_SIZE 32 @@ -802,6 +804,35 @@ xfdesktop_icon_view_button_press(GtkWidget *widget, } static gboolean +xfdesktop_icon_view_get_single_click(XfdesktopIconView *icon_view) +{ + gboolean have_xfconf = FALSE; + XfconfChannel *desktop_channel = NULL; + gboolean single_click = FALSE; + const gchar *single_click_property = "/desktop-icons/single-click"; + + have_xfconf = xfconf_init(NULL); + if(have_xfconf) { + desktop_channel = xfconf_channel_get(XFDESKTOP_CHANNEL); + + if(xfconf_channel_has_property(desktop_channel, + single_click_property)) { + single_click = xfconf_channel_get_bool(desktop_channel, + single_click_property, + FALSE); + } else { + /* property doesn't exist, create it for the user */ + xfconf_channel_set_bool(desktop_channel, + single_click_property, + FALSE); + } + xfconf_shutdown(); + } + + return single_click; +} + +static gboolean xfdesktop_icon_view_button_release(GtkWidget *widget, GdkEventButton *evt, gpointer user_data) @@ -810,6 +841,22 @@ xfdesktop_icon_view_button_release(GtkWidget *widget, TRACE("entering btn=%d", evt->button); + /* single-click */ + if(xfdesktop_icon_view_get_single_click(icon_view) + && evt->button == 1 + && !icon_view->priv->definitely_dragging + && !icon_view->priv->definitely_rubber_banding) { + XfdesktopIcon *icon; + GList *icon_l = g_list_find_custom(icon_view->priv->icons, evt, + (GCompareFunc)xfdesktop_check_icon_clicked); + if(icon_l && (icon = icon_l->data)) { + icon_view->priv->cursor = icon; + g_signal_emit(G_OBJECT(icon_view), __signals[SIG_ICON_ACTIVATED], + 0, NULL); + xfdesktop_icon_activated(icon); + } + } + if(evt->button == 1) { DBG("unsetting stuff"); icon_view->priv->definitely_dragging = FALSE; -- 1.7.5.4