202 lines
5.9 KiB
Diff
202 lines
5.9 KiB
Diff
|
Patch updated on 17 May 2006 with this changelog:
|
||
|
|
||
|
================================================================================
|
||
|
--- gtk/gtkfontsel.c
|
||
|
+++ gtk/gtkfontsel.c
|
||
|
@@ -563,11 +563,24 @@
|
||
|
gtk_font_selection_finalize (GObject *object)
|
||
|
{
|
||
|
GtkFontSelection *fontsel;
|
||
|
+ guint selection_timeout;
|
||
|
|
||
|
g_return_if_fail (GTK_IS_FONT_SELECTION (object));
|
||
|
|
||
|
fontsel = GTK_FONT_SELECTION (object);
|
||
|
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "font-selection-timeout"));
|
||
|
+ if (selection_timeout)
|
||
|
+ g_source_remove (selection_timeout);
|
||
|
+
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "style-selection-timeout"));
|
||
|
+ if (selection_timeout)
|
||
|
+ g_source_remove (selection_timeout);
|
||
|
+
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "size-selection-timeout"));
|
||
|
+ if (selection_timeout)
|
||
|
+ g_source_remove (selection_timeout);
|
||
|
+
|
||
|
if (fontsel->font)
|
||
|
gdk_font_unref (fontsel->font);
|
||
|
|
||
|
@@ -646,10 +659,10 @@
|
||
|
}
|
||
|
|
||
|
/* This is called when a family is selected in the list. */
|
||
|
-static void
|
||
|
-gtk_font_selection_select_font (GtkTreeSelection *selection,
|
||
|
- gpointer data)
|
||
|
+static gboolean
|
||
|
+gtk_font_selection_real_select_font (gpointer data)
|
||
|
{
|
||
|
+ GtkTreeSelection *selection;
|
||
|
GtkFontSelection *fontsel;
|
||
|
GtkTreeModel *model;
|
||
|
GtkTreeIter iter;
|
||
|
@@ -657,7 +670,11 @@
|
||
|
const gchar *family_name;
|
||
|
#endif
|
||
|
|
||
|
+ if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
|
||
|
+ GDK_THREADS_ENTER ();
|
||
|
+
|
||
|
fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (fontsel->family_list));
|
||
|
|
||
|
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||
|
{
|
||
|
@@ -679,6 +696,31 @@
|
||
|
|
||
|
g_object_unref (family);
|
||
|
}
|
||
|
+
|
||
|
+ g_object_set_data (G_OBJECT (fontsel), "font-selection-timeout", GUINT_TO_POINTER (0));
|
||
|
+
|
||
|
+ if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
|
||
|
+ GDK_THREADS_LEAVE ();
|
||
|
+
|
||
|
+ /* Remove ourselves */
|
||
|
+ return FALSE;
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+gtk_font_selection_select_font (GtkTreeSelection *selection,
|
||
|
+ gpointer data)
|
||
|
+{
|
||
|
+ GtkFontSelection *fontsel;
|
||
|
+ guint selection_timeout = 0;
|
||
|
+
|
||
|
+ fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "font-selection-timeout"));
|
||
|
+
|
||
|
+ 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));
|
||
|
}
|
||
|
|
||
|
static int
|
||
|
@@ -881,14 +923,20 @@
|
||
|
|
||
|
|
||
|
/* This is called when a style is selected in the list. */
|
||
|
-static void
|
||
|
-gtk_font_selection_select_style (GtkTreeSelection *selection,
|
||
|
- gpointer data)
|
||
|
+static gboolean
|
||
|
+gtk_font_selection_real_select_style (gpointer data)
|
||
|
{
|
||
|
- GtkFontSelection *fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ GtkTreeSelection *selection;
|
||
|
+ GtkFontSelection *fontsel;
|
||
|
GtkTreeModel *model;
|
||
|
GtkTreeIter iter;
|
||
|
|
||
|
+ if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
|
||
|
+ GDK_THREADS_ENTER ();
|
||
|
+
|
||
|
+ fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (fontsel->face_list));
|
||
|
+
|
||
|
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||
|
{
|
||
|
PangoFontFace *face;
|
||
|
@@ -901,6 +949,31 @@
|
||
|
|
||
|
gtk_font_selection_show_available_sizes (fontsel, FALSE);
|
||
|
gtk_font_selection_select_best_size (fontsel);
|
||
|
+
|
||
|
+ g_object_set_data (G_OBJECT (fontsel), "style-selection-timeout", GUINT_TO_POINTER (0));
|
||
|
+
|
||
|
+ if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
|
||
|
+ GDK_THREADS_LEAVE ();
|
||
|
+
|
||
|
+ /* Remove ourselves */
|
||
|
+ return FALSE;
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+gtk_font_selection_select_style (GtkTreeSelection *selection,
|
||
|
+ gpointer data)
|
||
|
+{
|
||
|
+ GtkFontSelection *fontsel;
|
||
|
+ guint selection_timeout = 0;
|
||
|
+
|
||
|
+ fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "style-selection-timeout"));
|
||
|
+
|
||
|
+ 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));
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
@@ -1033,22 +1106,51 @@
|
||
|
}
|
||
|
|
||
|
/* This is called when a size is selected in the list. */
|
||
|
-static void
|
||
|
-gtk_font_selection_select_size (GtkTreeSelection *selection,
|
||
|
- gpointer data)
|
||
|
+static gboolean
|
||
|
+gtk_font_selection_real_select_size (gpointer data)
|
||
|
{
|
||
|
+ GtkTreeSelection *selection;
|
||
|
GtkFontSelection *fontsel;
|
||
|
GtkTreeModel *model;
|
||
|
GtkTreeIter iter;
|
||
|
gint new_size;
|
||
|
|
||
|
+ if (!g_object_get_data (G_OBJECT (data), "immediate-selection"))
|
||
|
+ GDK_THREADS_ENTER ();
|
||
|
+
|
||
|
fontsel = GTK_FONT_SELECTION (data);
|
||
|
-
|
||
|
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (fontsel->size_list));
|
||
|
+
|
||
|
if (gtk_tree_selection_get_selected (selection, &model, &iter))
|
||
|
{
|
||
|
gtk_tree_model_get (model, &iter, SIZE_COLUMN, &new_size, -1);
|
||
|
gtk_font_selection_set_size (fontsel, new_size * PANGO_SCALE);
|
||
|
}
|
||
|
+
|
||
|
+ g_object_set_data (G_OBJECT (fontsel), "size-selection-timeout", GUINT_TO_POINTER (0));
|
||
|
+
|
||
|
+ if (!g_object_get_data (G_OBJECT (fontsel), "immediate-selection"))
|
||
|
+ GDK_THREADS_LEAVE ();
|
||
|
+
|
||
|
+ /* Remove ourselves */
|
||
|
+ return FALSE;
|
||
|
+}
|
||
|
+
|
||
|
+static void
|
||
|
+gtk_font_selection_select_size (GtkTreeSelection *selection,
|
||
|
+ gpointer data)
|
||
|
+{
|
||
|
+ GtkFontSelection *fontsel;
|
||
|
+ guint selection_timeout = 0;
|
||
|
+
|
||
|
+ fontsel = GTK_FONT_SELECTION (data);
|
||
|
+ selection_timeout = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (fontsel), "size-selection-timeout"));
|
||
|
+
|
||
|
+ 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));
|
||
|
}
|
||
|
|
||
|
static void
|