[gtk+/gtk-2-24] Implement gtk-primary-button-warps-slider GtkSetting
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24] Implement gtk-primary-button-warps-slider GtkSetting
- Date: Fri, 7 Sep 2012 14:49:11 +0000 (UTC)
commit b4ddf24234ccc26647bce8808e9824f268d597b8
Author: Kristian Rietveld <kris lanedo com>
Date: Fri Aug 24 11:49:43 2012 +0200
Implement gtk-primary-button-warps-slider GtkSetting
It replaces the recently added GtkRange:primary-button-warps-slider
style property. Implement the setting in the quartz backend,
it proxies the "click in the scroll bar to" property from the
OS X PrefPane.
gdk/quartz/gdkevents-quartz.c | 65 +++++++++++++++++++++++++++++++++++++++++
gtk/gtkrange.c | 12 ++------
gtk/gtksettings.c | 21 ++++++++++++-
3 files changed, 88 insertions(+), 10 deletions(-)
---
diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
index 744de52..0810962 100644
--- a/gdk/quartz/gdkevents-quartz.c
+++ b/gdk/quartz/gdkevents-quartz.c
@@ -64,10 +64,62 @@ gdk_quartz_event_get_nsevent (GdkEvent *event)
return ((GdkEventPrivate *) event)->windowing_data;
}
+static void
+gdk_quartz_ns_notification_callback (CFNotificationCenterRef center,
+ void *observer,
+ CFStringRef name,
+ const void *object,
+ CFDictionaryRef userInfo)
+{
+ GdkEvent new_event;
+
+ new_event.type = GDK_SETTING;
+ new_event.setting.window = gdk_screen_get_root_window (_gdk_screen);
+ new_event.setting.send_event = FALSE;
+ new_event.setting.action = GDK_SETTING_ACTION_CHANGED;
+ new_event.setting.name = NULL;
+
+ /* Translate name */
+ if (CFStringCompare (name,
+ CFSTR("AppleNoRedisplayAppearancePreferenceChanged"),
+ 0) == kCFCompareEqualTo)
+ new_event.setting.name = "gtk-primary-button-warps-slider";
+
+ if (!new_event.setting.name)
+ return;
+
+ gdk_event_put (&new_event);
+}
+
+static void
+gdk_quartz_events_init_notifications (void)
+{
+ static gboolean notifications_initialized = FALSE;
+
+ if (notifications_initialized)
+ return;
+ notifications_initialized = TRUE;
+
+ /* Initialize any handlers for notifications we want to push to GTK
+ * through GdkEventSettings.
+ */
+
+ /* This is an undocumented *distributed* notification to listen for changes
+ * in scrollbar jump behavior. It is used by LibreOffice and WebKit as well.
+ */
+ CFNotificationCenterAddObserver (CFNotificationCenterGetDistributedCenter (),
+ NULL,
+ &gdk_quartz_ns_notification_callback,
+ CFSTR ("AppleNoRedisplayAppearancePreferenceChanged"),
+ NULL,
+ CFNotificationSuspensionBehaviorDeliverImmediately);
+}
+
void
_gdk_events_init (void)
{
_gdk_quartz_event_loop_init ();
+ gdk_quartz_events_init_notifications ();
current_keyboard_window = g_object_ref (_gdk_root);
}
@@ -1565,6 +1617,19 @@ gdk_screen_get_setting (GdkScreen *screen,
return TRUE;
}
+ else if (strcmp (name, "gtk-primary-button-warps-slider") == 0)
+ {
+ GDK_QUARTZ_ALLOC_POOL;
+
+ BOOL setting = [[NSUserDefaults standardUserDefaults] boolForKey:@"AppleScrollerPagingBehavior"];
+
+ /* If the Apple property is YES, it means "warp" */
+ g_value_set_boolean (value, setting == YES);
+
+ GDK_QUARTZ_RELEASE_POOL;
+
+ return TRUE;
+ }
/* FIXME: Add more settings */
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index e94ea6e..245fbf6 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -532,12 +532,6 @@ gtk_range_class_init (GtkRangeClass *class)
G_MAXINT,
0,
GTK_PARAM_READABLE));
- gtk_widget_class_install_style_property (widget_class,
- g_param_spec_boolean ("primary-button-warps-slider",
- P_("Primary button warps slider"),
- P_("Whether a primary click on the trough should warp the slider into position"),
- FALSE,
- GTK_PARAM_READABLE));
/**
* GtkRange:activate-slider:
@@ -2331,9 +2325,9 @@ gtk_range_button_press (GtkWidget *widget,
if (gtk_range_update_mouse_location (range))
gtk_widget_queue_draw (widget);
- gtk_widget_style_get (widget,
- "primary-button-warps-slider", &primary_warps,
- NULL);
+ g_object_get (gtk_widget_get_settings (widget),
+ "gtk-primary-button-warps-slider", &primary_warps,
+ NULL);
if (primary_warps)
{
warp_button = 1;
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index c5f77fe..7015e48 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -125,7 +125,8 @@ enum {
PROP_ENABLE_TOOLTIPS,
PROP_TOOLBAR_STYLE,
PROP_TOOLBAR_ICON_SIZE,
- PROP_AUTO_MNEMONICS
+ PROP_AUTO_MNEMONICS,
+ PROP_PRIMARY_BUTTON_WARPS_SLIDER
};
@@ -1023,6 +1024,24 @@ gtk_settings_class_init (GtkSettingsClass *class)
GTK_PARAM_READWRITE),
NULL);
g_assert (result == PROP_AUTO_MNEMONICS);
+
+ /**
+ * GtkSettings:gtk-primary-button-warps-slider
+ *
+ * Whether a click in a #GtkRange trough should scroll to the click position or
+ * scroll by a single page in the respective direction.
+ *
+ * Since: 2.24
+ */
+ result = settings_install_property_parser (class,
+ g_param_spec_boolean ("gtk-primary-button-warps-slider",
+ P_("Primary button warps slider"),
+ P_("Whether a primary click on the trough should warp the slider into position"),
+ FALSE,
+ GTK_PARAM_READWRITE),
+ NULL);
+
+ g_assert (result == PROP_PRIMARY_BUTTON_WARPS_SLIDER);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]