Add wxSYS_CARET_{ON,OFF,TIMEOUT}_MSEC system settings
Provide a way to retrieve the caret blink times from wxSystemSe and implement it for wxOSX and wxGTK. Closes #17629.
This commit is contained in:
@@ -96,6 +96,7 @@ All (GUI):
|
|||||||
- Fix rescaling of wxImage.
|
- Fix rescaling of wxImage.
|
||||||
- Fix displaying edited value of wxUIntProperty (wxPropertyGrid).
|
- Fix displaying edited value of wxUIntProperty (wxPropertyGrid).
|
||||||
- Fix displaying validation errors for numeric wxPropertyGrid properties.
|
- Fix displaying validation errors for numeric wxPropertyGrid properties.
|
||||||
|
- Add wxSYS_CARET_{ON,OFF,TIMEOUT}_MSEC system settings (brawer).
|
||||||
|
|
||||||
wxGTK:
|
wxGTK:
|
||||||
|
|
||||||
|
@@ -137,7 +137,10 @@ enum wxSystemMetric
|
|||||||
wxSYS_PENWINDOWS_PRESENT,
|
wxSYS_PENWINDOWS_PRESENT,
|
||||||
wxSYS_SHOW_SOUNDS,
|
wxSYS_SHOW_SOUNDS,
|
||||||
wxSYS_SWAP_BUTTONS,
|
wxSYS_SWAP_BUTTONS,
|
||||||
wxSYS_DCLICK_MSEC
|
wxSYS_DCLICK_MSEC,
|
||||||
|
wxSYS_CARET_ON_MSEC,
|
||||||
|
wxSYS_CARET_OFF_MSEC,
|
||||||
|
wxSYS_CARET_TIMEOUT_MSEC
|
||||||
};
|
};
|
||||||
|
|
||||||
// possible values for wxSystemSettings::HasFeature() parameter
|
// possible values for wxSystemSettings::HasFeature() parameter
|
||||||
|
@@ -191,7 +191,41 @@ enum wxSystemMetric
|
|||||||
//!< visually in situations where it would otherwise present the information
|
//!< visually in situations where it would otherwise present the information
|
||||||
//!< only in audible form; zero otherwise.
|
//!< only in audible form; zero otherwise.
|
||||||
wxSYS_SWAP_BUTTONS, //!< Non-zero if the meanings of the left and right mouse buttons are swapped; zero otherwise.
|
wxSYS_SWAP_BUTTONS, //!< Non-zero if the meanings of the left and right mouse buttons are swapped; zero otherwise.
|
||||||
wxSYS_DCLICK_MSEC //!< Maximal time, in milliseconds, which may pass between subsequent clicks for a double click to be generated.
|
wxSYS_DCLICK_MSEC, //!< Maximal time, in milliseconds, which may pass between subsequent clicks for a double click to be generated.
|
||||||
|
|
||||||
|
/**
|
||||||
|
Time, in milliseconds, for how long a blinking caret should
|
||||||
|
stay visible during a single blink cycle before it disappears.
|
||||||
|
If this value is negative, the platform does not support the
|
||||||
|
user setting. Implemented only on GTK+ and MacOS X.
|
||||||
|
|
||||||
|
@since 3.1.1
|
||||||
|
*/
|
||||||
|
wxSYS_CARET_ON_MSEC,
|
||||||
|
|
||||||
|
/**
|
||||||
|
Time, in milliseconds, for how long a blinking caret should
|
||||||
|
stay invisible during a single blink cycle before it reappears.
|
||||||
|
If this value is zero, carets should be visible all the time
|
||||||
|
instead of blinking. If the value is negative, the platform
|
||||||
|
does not support the user setting. Implemented only on GTK+
|
||||||
|
and MacOS X.
|
||||||
|
|
||||||
|
@since 3.1.1
|
||||||
|
*/
|
||||||
|
wxSYS_CARET_OFF_MSEC,
|
||||||
|
|
||||||
|
/**
|
||||||
|
Time, in milliseconds, for how long a caret should blink after
|
||||||
|
a user interaction. After this timeout has expired, the caret
|
||||||
|
should stay continuously visible until the user interacts with
|
||||||
|
the caret again (for example by entering, deleting or cutting
|
||||||
|
text). If this value is negative, carets should blink forever;
|
||||||
|
if it is zero, carets should not blink at all.
|
||||||
|
|
||||||
|
@since 3.1.1
|
||||||
|
*/
|
||||||
|
wxSYS_CARET_TIMEOUT_MSEC
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -19,6 +19,8 @@
|
|||||||
#include "wx/fontutil.h"
|
#include "wx/fontutil.h"
|
||||||
#include "wx/fontenum.h"
|
#include "wx/fontenum.h"
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
#include "wx/gtk/private/win_gtk.h"
|
#include "wx/gtk/private/win_gtk.h"
|
||||||
#include "wx/gtk/private/gtk2-compat.h"
|
#include "wx/gtk/private/gtk2-compat.h"
|
||||||
@@ -574,6 +576,56 @@ int wxSystemSettingsNative::GetMetric( wxSystemMetric index, wxWindow* win )
|
|||||||
"gtk-double-click-time", &dclick, NULL);
|
"gtk-double-click-time", &dclick, NULL);
|
||||||
return dclick;
|
return dclick;
|
||||||
|
|
||||||
|
case wxSYS_CARET_ON_MSEC:
|
||||||
|
{
|
||||||
|
gint blink_time = -1;
|
||||||
|
g_object_get(GetSettingsForWindowScreen(window),
|
||||||
|
"gtk-cursor-blink-time", &blink_time, NULL);
|
||||||
|
if (blink_time > 0)
|
||||||
|
return blink_time / 2;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case wxSYS_CARET_OFF_MSEC:
|
||||||
|
{
|
||||||
|
gboolean should_blink = true;
|
||||||
|
gint blink_time = -1;
|
||||||
|
g_object_get(GetSettingsForWindowScreen(window),
|
||||||
|
"gtk-cursor-blink", &should_blink,
|
||||||
|
"gtk-cursor-blink-time", &blink_time,
|
||||||
|
NULL);
|
||||||
|
if (!should_blink)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (blink_time > 0)
|
||||||
|
return blink_time / 2;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case wxSYS_CARET_TIMEOUT_MSEC:
|
||||||
|
{
|
||||||
|
gboolean should_blink = true;
|
||||||
|
gint timeout = 0;
|
||||||
|
g_object_get(GetSettingsForWindowScreen(window),
|
||||||
|
"gtk-cursor-blink", &should_blink,
|
||||||
|
"gtk-cursor-blink-timeout", &timeout,
|
||||||
|
NULL);
|
||||||
|
if (!should_blink)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// GTK+ returns this value in seconds, not milliseconds,
|
||||||
|
// Special value of 2147483647 means that the cursor never
|
||||||
|
// blinks and we handle any value that would overflow int after
|
||||||
|
// multiplication in the same manner as it looks quite
|
||||||
|
// unnecessary to support cursor blinking once a month.
|
||||||
|
if (timeout > 0 && timeout < INT32_MAX / 1000)
|
||||||
|
return timeout * 1000;
|
||||||
|
|
||||||
|
return -1; // no timeout, blink forever
|
||||||
|
}
|
||||||
|
|
||||||
case wxSYS_DRAG_X:
|
case wxSYS_DRAG_X:
|
||||||
case wxSYS_DRAG_Y:
|
case wxSYS_DRAG_Y:
|
||||||
gint drag_threshold;
|
gint drag_threshold;
|
||||||
|
@@ -21,6 +21,26 @@
|
|||||||
#include "wx/osx/cocoa/private.h"
|
#include "wx/osx/cocoa/private.h"
|
||||||
|
|
||||||
#import <AppKit/NSColor.h>
|
#import <AppKit/NSColor.h>
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int wxOSXGetUserDefault(NSString* key, int defaultValue)
|
||||||
|
{
|
||||||
|
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
|
||||||
|
if (!defaults)
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
id setting = [defaults objectForKey: key];
|
||||||
|
if (!setting)
|
||||||
|
{
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [setting intValue];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxSystemSettingsNative
|
// wxSystemSettingsNative
|
||||||
@@ -231,6 +251,32 @@ int wxSystemSettingsNative::GetMetric(wxSystemMetric index, wxWindow *WXUNUSED(w
|
|||||||
// but rather rely on the 'click-count' by the system delivered in a mouse event
|
// but rather rely on the 'click-count' by the system delivered in a mouse event
|
||||||
return 500;
|
return 500;
|
||||||
|
|
||||||
|
case wxSYS_CARET_ON_MSEC:
|
||||||
|
value = wxOSXGetUserDefault(@"NSTextInsertionPointBlinkPeriodOn", -1);
|
||||||
|
if (value > 0)
|
||||||
|
return value;
|
||||||
|
|
||||||
|
value = wxOSXGetUserDefault(@"NSTextInsertionPointBlinkPeriod", -1);
|
||||||
|
if (value > 0)
|
||||||
|
return value / 2;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
case wxSYS_CARET_OFF_MSEC:
|
||||||
|
value = wxOSXGetUserDefault(@"NSTextInsertionPointBlinkPeriodOff", -1);
|
||||||
|
if (value > 0)
|
||||||
|
return value;
|
||||||
|
|
||||||
|
value = wxOSXGetUserDefault(@"NSTextInsertionPointBlinkPeriod", -1);
|
||||||
|
if (value > 0)
|
||||||
|
return value / 2;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
case wxSYS_CARET_TIMEOUT_MSEC:
|
||||||
|
// On MacOS X, carets don't stop blinking after user interactions.
|
||||||
|
return -1;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return -1; // unsupported metric
|
return -1; // unsupported metric
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user