195 lines
6.1 KiB
C
195 lines
6.1 KiB
C
/*
|
|
* Copyright © 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
|
* Copyright © 1998-2002 Tor Lillqvist
|
|
* Copyright © 2005-2008 Imendio AB
|
|
* Copyright © 2020 Red Hat, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <AppKit/AppKit.h>
|
|
|
|
#include "gdkdisplayprivate.h"
|
|
|
|
#include "gdkmacosdisplay-private.h"
|
|
#include "gdkmacosutils-private.h"
|
|
|
|
typedef struct
|
|
{
|
|
const char *font_name;
|
|
int xft_dpi;
|
|
int double_click_time;
|
|
int cursor_blink_time;
|
|
guint enable_animations : 1;
|
|
guint shell_shows_desktop : 1;
|
|
guint shell_shows_menubar : 1;
|
|
guint primary_button_warps_slider : 1;
|
|
} GdkMacosSettings;
|
|
|
|
static GdkMacosSettings current_settings;
|
|
static gboolean current_settings_initialized;
|
|
|
|
static void
|
|
_gdk_macos_settings_load (GdkMacosSettings *settings)
|
|
{
|
|
GDK_BEGIN_MACOS_ALLOC_POOL;
|
|
|
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
|
NSString *name;
|
|
NSInteger ival;
|
|
float fval;
|
|
char *str;
|
|
int pt_size;
|
|
|
|
g_assert (settings != NULL);
|
|
|
|
settings->shell_shows_desktop = TRUE;
|
|
settings->shell_shows_menubar = TRUE;
|
|
settings->enable_animations = TRUE;
|
|
settings->xft_dpi = 72 * 1024;
|
|
|
|
ival = [defaults integerForKey:@"NSTextInsertionPointBlinkPeriod"];
|
|
if (ival > 0)
|
|
settings->cursor_blink_time = ival;
|
|
else
|
|
settings->cursor_blink_time = 1000;
|
|
|
|
settings->primary_button_warps_slider =
|
|
[[NSUserDefaults standardUserDefaults] boolForKey:@"AppleScrollerPagingBehavior"] == YES;
|
|
|
|
fval = [defaults floatForKey:@"com.apple.mouse.doubleClickThreshold"];
|
|
if (fval == 0.0)
|
|
fval = 0.5;
|
|
settings->double_click_time = fval * 1000;
|
|
|
|
name = [[NSFont systemFontOfSize:0] familyName];
|
|
pt_size = (int)[[NSFont userFontOfSize:0] pointSize];
|
|
/* Let's try to use the "views" font size (12pt) by default. This is
|
|
* used for lists/text/other "content" which is the largest parts of
|
|
* apps, using the "regular control" size (13pt) looks a bit out of
|
|
* place. We might have to tweak this.
|
|
*
|
|
* The size has to be hardcoded as there doesn't seem to be a way to
|
|
* get the views font size programmatically.
|
|
*/
|
|
str = g_strdup_printf ("%s %d", [name UTF8String], pt_size);
|
|
settings->font_name = g_intern_string (str);
|
|
g_free (str);
|
|
|
|
GDK_END_MACOS_ALLOC_POOL;
|
|
}
|
|
|
|
gboolean
|
|
_gdk_macos_display_get_setting (GdkMacosDisplay *self,
|
|
const char *setting,
|
|
GValue *value)
|
|
{
|
|
GDK_BEGIN_MACOS_ALLOC_POOL;
|
|
|
|
gboolean ret = FALSE;
|
|
|
|
g_return_val_if_fail (GDK_IS_MACOS_DISPLAY (self), FALSE);
|
|
g_return_val_if_fail (setting != NULL, FALSE);
|
|
g_return_val_if_fail (value != NULL, FALSE);
|
|
|
|
if (!current_settings_initialized)
|
|
{
|
|
_gdk_macos_settings_load (¤t_settings);
|
|
current_settings_initialized = TRUE;
|
|
}
|
|
|
|
if (FALSE) {}
|
|
else if (strcmp (setting, "gtk-enable-animations") == 0)
|
|
{
|
|
g_value_set_boolean (value, current_settings.enable_animations);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-xft-dpi") == 0)
|
|
{
|
|
g_value_set_int (value, current_settings.xft_dpi);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-cursor-blink-time") == 0)
|
|
{
|
|
g_value_set_int (value, current_settings.cursor_blink_time);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-double-click-time") == 0)
|
|
{
|
|
g_value_set_int (value, current_settings.double_click_time);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-font-name") == 0)
|
|
{
|
|
g_value_set_static_string (value, current_settings.font_name);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-primary-button-warps-slider") == 0)
|
|
{
|
|
g_value_set_boolean (value, current_settings.primary_button_warps_slider);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-shell-shows-desktop") == 0)
|
|
{
|
|
g_value_set_boolean (value, current_settings.shell_shows_desktop);
|
|
ret = TRUE;
|
|
}
|
|
else if (strcmp (setting, "gtk-shell-shows-menubar") == 0)
|
|
{
|
|
g_value_set_boolean (value, current_settings.shell_shows_menubar);
|
|
ret = TRUE;
|
|
}
|
|
|
|
GDK_END_MACOS_ALLOC_POOL;
|
|
|
|
return ret;
|
|
}
|
|
|
|
void
|
|
_gdk_macos_display_reload_settings (GdkMacosDisplay *self)
|
|
{
|
|
GdkMacosSettings old_settings;
|
|
|
|
g_return_if_fail (GDK_IS_MACOS_DISPLAY (self));
|
|
|
|
old_settings = current_settings;
|
|
_gdk_macos_settings_load (¤t_settings);
|
|
current_settings_initialized = TRUE;
|
|
|
|
if (old_settings.xft_dpi != current_settings.xft_dpi)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-xft-dpi");
|
|
|
|
if (old_settings.double_click_time != current_settings.double_click_time)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-double-click-time");
|
|
|
|
if (old_settings.enable_animations != current_settings.enable_animations)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-enable-animations");
|
|
|
|
if (old_settings.font_name != current_settings.font_name)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-font-name");
|
|
|
|
if (old_settings.primary_button_warps_slider != current_settings.primary_button_warps_slider)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-primary-button-warps-slider");
|
|
|
|
if (old_settings.shell_shows_menubar != current_settings.shell_shows_menubar)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-shell-shows-menubar");
|
|
|
|
if (old_settings.shell_shows_desktop != current_settings.shell_shows_desktop)
|
|
gdk_display_setting_changed (GDK_DISPLAY (self), "gtk-shell-shows-desktop");
|
|
}
|