gtk2/gtk+-2.8.6-fontsel-fix.patch

120 lines
4.0 KiB
Diff

--- gtk/gtkfontsel.c
+++ gtk/gtkfontsel.c
@@ -595,9 +595,15 @@
if (gtk_widget_has_screen (GTK_WIDGET (fontsel)))
{
+ /* Disable selection timeout */
+ g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (1));
+
gtk_font_selection_show_available_fonts (fontsel);
gtk_font_selection_show_available_sizes (fontsel, TRUE);
gtk_font_selection_show_available_styles (fontsel);
+
+ /* Enable selection timeout */
+ g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (0));
}
}
@@ -712,15 +718,24 @@
{
GtkFontSelection *fontsel;
guint selection_timeout = 0;
+ guint immediate_selection = 0;
fontsel = GTK_FONT_SELECTION (data);
selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "font-selection-timeout"));
+ immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
if (selection_timeout)
g_source_remove (selection_timeout);
- selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_font, data);
- g_object_set_data (G_OBJECT (fontsel), "font-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ if (immediate_selection)
+ {
+ gtk_font_selection_real_select_font (data);
+ }
+ else
+ {
+ selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_font, data);
+ g_object_set_data (G_OBJECT (fontsel), "font-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ }
}
static int
@@ -965,15 +980,24 @@
{
GtkFontSelection *fontsel;
guint selection_timeout = 0;
+ guint immediate_selection = 0;
fontsel = GTK_FONT_SELECTION (data);
selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "style-selection-timeout"));
+ immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
if (selection_timeout)
g_source_remove (selection_timeout);
- selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_style, data);
- g_object_set_data (G_OBJECT (fontsel), "style-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ if (immediate_selection)
+ {
+ gtk_font_selection_real_select_style (data);
+ }
+ else
+ {
+ selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_style, data);
+ g_object_set_data (G_OBJECT (fontsel), "style-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ }
}
static void
@@ -1142,15 +1166,24 @@
{
GtkFontSelection *fontsel;
guint selection_timeout = 0;
+ guint immediate_selection = 0;
fontsel = GTK_FONT_SELECTION (data);
selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "size-selection-timeout"));
+ immediate_selection = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "immediate-selection"));
if (selection_timeout)
g_source_remove (selection_timeout);
- selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_size, data);
- g_object_set_data (G_OBJECT (fontsel), "size-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ if (immediate_selection)
+ {
+ gtk_font_selection_real_select_size (data);
+ }
+ else
+ {
+ selection_timeout = g_timeout_add (200, gtk_font_selection_real_select_size, data);
+ g_object_set_data (G_OBJECT (fontsel), "size-selection-timeout", GUINT_TO_POINTER (selection_timeout));
+ }
}
static void
@@ -1334,6 +1367,9 @@
if (!new_family)
return FALSE;
+ /* Disable selection timeout */
+ g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (1));
+
fontsel->family = new_family;
set_cursor_to_iter (GTK_TREE_VIEW (fontsel->family_list), &iter);
gtk_font_selection_show_available_styles (fontsel);
@@ -1383,6 +1419,9 @@
pango_font_description_free (new_desc);
+ /* Enable selection timeout */
+ g_object_set_data (G_OBJECT (fontsel), "immediate-selection", GUINT_TO_POINTER (0));
+
return TRUE;
}