aboutsummaryrefslogtreecommitdiffstats
path: root/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch')
-rw-r--r--meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch251
1 files changed, 251 insertions, 0 deletions
diff --git a/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch b/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch
new file mode 100644
index 0000000000..180ccfd55f
--- /dev/null
+++ b/meta-xfce/recipes-xfce/xfce4-settings/xfce4-settings/touchscreen/0004-XfceXSettingsHelper-gets-a-property-touchscreen-poin.patch
@@ -0,0 +1,251 @@
+From 878fe1287a4c73f67dd2b51d1d7c450097aeffa7 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Thu, 20 Dec 2012 16:49:18 +0100
+Subject: [PATCH 4/5] XfceXSettingsHelper gets a property
+ "touchscreen-pointer"
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+When this property is set, it overrides overrides cursor theme to
+"xfce-invisible" and sets /Gtk/TouchscreenMode.
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+Upstream-Status: Submitted [1]
+[1] https://bugzilla.xfce.org/show_bug.cgi?id=9474
+---
+ xfsettingsd/xsettings.c | 122 ++++++++++++++++++++++++++++++++++++++++++++-
+ xfsettingsd/xsettings.xml | 1 +
+ 2 files changed, 122 insertions(+), 1 deletions(-)
+
+diff --git a/xfsettingsd/xsettings.c b/xfsettingsd/xsettings.c
+index 7657465..76bcea1 100644
+--- a/xfsettingsd/xsettings.c
++++ b/xfsettingsd/xsettings.c
+@@ -73,6 +73,15 @@ typedef struct _XfceXSettingsNotify XfceXSettingsNotify;
+
+
+
++/* Property identifiers */
++enum
++{
++ PROP_0,
++ PROP_TOUCHSCREEN_POINTER,
++};
++
++
++
+ static void xfce_xsettings_helper_finalize (GObject *object);
+ static void xfce_xsettings_helper_fc_free (XfceXSettingsHelper *helper);
+ static gboolean xfce_xsettings_helper_fc_init (gpointer data);
+@@ -86,6 +95,10 @@ static void xfce_xsettings_helper_load (XfceXSettingsHelper *helper)
+ static void xfce_xsettings_helper_screen_free (XfceXSettingsScreen *screen);
+ static void xfce_xsettings_helper_notify_xft (XfceXSettingsHelper *helper);
+ static void xfce_xsettings_helper_notify (XfceXSettingsHelper *helper);
++static void xfce_xsettings_helper_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec);
+
+
+
+@@ -120,6 +133,13 @@ struct _XfceXSettingsHelper
+ GPtrArray *fc_monitors;
+ guint fc_notify_timeout_id;
+ guint fc_init_id;
++
++ /* keeper for touchscreen cursor theme / last set */
++ GValue *touchscreen_cursor_value;
++ GValue *lastset_cursor_value;
++
++ /* properties */
++ gboolean touchscreen_pointer;
+ };
+
+ struct _XfceXSetting
+@@ -157,6 +177,16 @@ xfce_xsettings_helper_class_init (XfceXSettingsHelperClass *klass)
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ gobject_class->finalize = xfce_xsettings_helper_finalize;
++ gobject_class->set_property = xfce_xsettings_helper_set_property;
++
++ g_object_class_install_property (gobject_class,
++ PROP_TOUCHSCREEN_POINTER,
++ g_param_spec_boolean ("touchscreen-pointer",
++ "touchscreen-pointer",
++ "touchscreen-pointer",
++ FALSE,
++ G_PARAM_WRITABLE |
++ G_PARAM_STATIC_STRINGS));
+ }
+
+
+@@ -169,6 +199,13 @@ xfce_xsettings_helper_init (XfceXSettingsHelper *helper)
+ helper->settings = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, xfce_xsettings_helper_setting_free);
+
++ helper->lastset_cursor_value = g_new0 (GValue, 1);
++ g_value_init(helper->lastset_cursor_value, G_TYPE_STRING);
++ g_value_set_string (helper->lastset_cursor_value, "default");
++ helper->touchscreen_cursor_value = g_new0 (GValue, 1);
++ g_value_init(helper->touchscreen_cursor_value, G_TYPE_STRING);
++ g_value_set_string (helper->touchscreen_cursor_value, "xfce-invisible");
++
+ xfce_xsettings_helper_load (helper);
+
+ g_signal_connect (G_OBJECT (helper->channel), "property-changed",
+@@ -202,6 +239,9 @@ xfce_xsettings_helper_finalize (GObject *object)
+
+ g_hash_table_destroy (helper->settings);
+
++ g_free (helper->lastset_cursor_value);
++ g_free (helper->touchscreen_cursor_value);
++
+ (*G_OBJECT_CLASS (xfce_xsettings_helper_parent_class)->finalize) (object);
+ }
+
+@@ -387,6 +427,61 @@ xfce_xsettings_helper_notify_xft_idle (gpointer data)
+
+
+
++static void
++xfce_xsettings_helper_set_property (GObject *object,
++ guint prop_id,
++ const GValue *value,
++ GParamSpec *pspec)
++{
++ gboolean touchscreen_pointer;
++ XfceXSetting *setting_theme, *setting_touchscreen;
++ XfceXSettingsHelper *helper = XFCE_XSETTINGS_HELPER (object);
++ GtkSettings *gtk_settings;
++ GValue bool_val = { 0, };
++
++ switch (prop_id)
++ {
++ case PROP_TOUCHSCREEN_POINTER:
++ touchscreen_pointer = g_value_get_boolean (value);
++ if (helper->touchscreen_pointer != touchscreen_pointer)
++ {
++ helper->touchscreen_pointer = touchscreen_pointer;
++ /* Update touchscreen-mode */
++ xfconf_channel_set_bool (helper->channel, "/Gtk/TouchscreenMode", touchscreen_pointer);
++ /* Update cursor */
++ setting_theme = g_hash_table_lookup (helper->settings, "/Gtk/CursorThemeName");
++ if (G_LIKELY (setting_theme != NULL))
++ {
++ /* update the serial */
++ setting_theme->last_change_serial = helper->serial;
++ /* update value */
++ g_value_reset (setting_theme->value);
++ g_value_copy (touchscreen_pointer ?
++ helper->touchscreen_cursor_value :
++ helper->lastset_cursor_value,
++ setting_theme->value);
++ }
++ else
++ g_critical("Setting not found for /Gtk/CursorThemeName");
++
++ if (G_LIKELY (setting_touchscreen != NULL || setting_theme != NULL))
++ {
++ /* schedule xsettings update */
++ if (helper->notify_idle_id == 0)
++ helper->notify_idle_id = g_idle_add (xfce_xsettings_helper_notify_idle, helper);
++ if (helper->notify_xft_idle_id == 0)
++ helper->notify_xft_idle_id = g_idle_add (xfce_xsettings_helper_notify_xft_idle, helper);
++ }
++ }
++ break;
++ default:
++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++ break;
++ }
++}
++
++
++
+ static gboolean
+ xfce_xsettings_helper_prop_valid (const gchar *prop_name,
+ const GValue *value)
+@@ -413,6 +508,28 @@ xfce_xsettings_helper_prop_valid (const gchar *prop_name,
+
+
+
++static void
++xfce_xsettings_helper_check_cursor (const gchar *prop_name,
++ GValue *value,
++ XfceXSettingsHelper *helper)
++{
++ if (g_strcmp0 (prop_name, "/Gtk/CursorThemeName") == 0)
++ {
++ /* Keep last cursor theme set */
++ g_value_reset (helper->lastset_cursor_value);
++ g_value_copy (value, helper->lastset_cursor_value);
++
++ /* invisible replacement required ? */
++ if (helper->touchscreen_pointer)
++ {
++ g_value_reset (value);
++ g_value_copy (helper->touchscreen_cursor_value, value);
++ }
++ }
++}
++
++
++
+ static gboolean
+ xfce_xsettings_helper_prop_load (gchar *prop_name,
+ GValue *value,
+@@ -426,6 +543,7 @@ xfce_xsettings_helper_prop_load (gchar *prop_name,
+
+ setting = g_slice_new0 (XfceXSetting);
+ setting->value = value;
++ xfce_xsettings_helper_check_cursor (prop_name, setting->value, helper);
+ setting->last_change_serial = helper->serial;
+
+ xfsettings_dbg_filtered (XFSD_DEBUG_XSETTINGS, "prop \"%s\" loaded (type=%s)",
+@@ -462,6 +580,7 @@ xfce_xsettings_helper_prop_changed (XfconfChannel *channel,
+ * it first */
+ g_value_reset (setting->value);
+ g_value_copy (value, setting->value);
++ xfce_xsettings_helper_check_cursor (prop_name, setting->value, helper);
+
+ /* update the serial */
+ setting->last_change_serial = helper->serial;
+@@ -475,6 +594,7 @@ xfce_xsettings_helper_prop_changed (XfconfChannel *channel,
+
+ g_value_init (setting->value, G_VALUE_TYPE (value));
+ g_value_copy (value, setting->value);
++ xfce_xsettings_helper_check_cursor (prop_name, setting->value, helper);
+
+ g_hash_table_insert (helper->settings, g_strdup (prop_name), setting);
+ }
+@@ -649,6 +769,7 @@ xfce_xsettings_helper_notify_xft (XfceXSettingsHelper *helper)
+ XfceXSetting *setting;
+ guint i;
+ GValue bool_val = { 0, };
++
+ const gchar *props[][2] =
+ {
+ /* { xfconf name}, { xft name } */
+@@ -700,7 +821,6 @@ xfce_xsettings_helper_notify_xft (XfceXSettingsHelper *helper)
+ PropModeReplace,
+ (guchar *) resource->str,
+ resource->len);
+-
+ XCloseDisplay (xdisplay);
+
+ if (gdk_error_trap_pop () != 0)
+diff --git a/xfsettingsd/xsettings.xml b/xfsettingsd/xsettings.xml
+index 0a579d6..baa413c 100644
+--- a/xfsettingsd/xsettings.xml
++++ b/xfsettingsd/xsettings.xml
+@@ -41,5 +41,6 @@
+ <property name="MenuBarAccel" type="string" value="F10"/>
+ <property name="CursorThemeName" type="string" value=""/>
+ <property name="CursorThemeSize" type="int" value="0"/>
++ <property name="TouchscreenMode" type="bool" value="false"/>
+ <property name="IMModule" type="string" value=""/>
+ </property>
+</channel>--
+1.7.6.5
+